hai mẹo chung:1.) Đừng sợ trùng lặp. Thường nên lưu trữ cùng một dữ liệu được định dạng khác nhau trong các bộ sưu tập khác nhau.
2.) nếu bạn muốn sắp xếp và tổng hợp các thứ, nó sẽ giúp giữ các trường đếm ở mọi nơi. Phương pháp cập nhật nguyên tử của mongodb cùng với các lệnh upert giúp dễ dàng đếm và thêm các trường vào tài liệu hiện có.
Phần sau chắc chắn là thiếu sót vì nó được đánh từ trên đỉnh đầu của tôi. Nhưng ví dụ xấu tốt hơn là không có ví dụ nào tôi nghĩ;)
colletion tweets:
{
tweetid: 123,
timeTweeted: 123123234, //exact time in milliseconds
dayInMillis: 123412343, //the day of the tweet kl 00:00:00
text: 'a tweet with a http://lin.k and an http://u.rl',
links: [
'http://lin.k',
'http://u.rl'
],
linkCount: 2
}
collection links:
{
url: 'http://lin.k'
totalCount: 17,
daycounts: {
1232345543354: 5, //key: the day of the tweet kl 00:00:00
1234123423442: 2,
1234354534535: 10
}
}
thêm tweet mới:
db.x.tweets.insert({...}) //simply insert new document with all fields
//for each found link:
var upsert = true;
var toFind = { url: '...'};
var updateObj = {'$inc': {'totalCount': 1, 'daycounts.12342342': 1 } }; //12342342 is the day of the tweet
db.x.links.update(toFind, updateObj, upsert);
Nhận mười liên kết hàng đầu được sắp xếp theo số lượng tweet mà chúng có?
db.x.links.find().sort({'totalCount:-1'}).limit(10);
Nhận liên kết được tweet nhiều nhất cho một ngày cụ thể?
db.x.links.find({'$gt':{'daycount.123413453':0}}).sort({'daycount.123413453':-1}).limit(1); //123413453 is the day you're after
Nhận các tweet cho một liên kết?
db.x.tweets.find({'links': 'http://lin.k'});
Nhận mười tweet trễ nhất?
db.x.tweets.find().sort({'timeTweeted': -1}, -1).limit(10);