twee algemene tips:1.) wees niet bang om te dupliceren. Het is vaak een goed idee om dezelfde gegevens op een andere manier op te slaan in verschillende verzamelingen.
2.) als je dingen wilt sorteren en optellen, helpt het om overal telvelden bij te houden. Mongodb's atomaire update-methode samen met upsert-commando's maken het gemakkelijk om op te tellen en velden toe te voegen aan bestaande documenten.
Het volgende is zeer zeker gebrekkig omdat het uit de top van mijn hoofd is getypt. Maar beter slechte voorbeelden dan geen voorbeelden dacht ik;)
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
}
}
nieuwe tweet toevoegen:
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);
De top tien links sorteren op aantal tweets die ze hebben?
db.x.links.find().sort({'totalCount:-1'}).limit(10);
De meest getweete link voor een specifieke datum ontvangen?
db.x.links.find({'$gt':{'daycount.123413453':0}}).sort({'daycount.123413453':-1}).limit(1); //123413453 is the day you're after
De tweets voor een link ontvangen?
db.x.tweets.find({'links': 'http://lin.k'});
De tien laatste tweets ontvangen?
db.x.tweets.find().sort({'timeTweeted': -1}, -1).limit(10);