to generelle tips:1.) vær ikke bange for at duplikere. Det er ofte en god idé at gemme de samme data forskelligt formateret i forskellige samlinger.
2.) hvis du vil sortere og opsummere ting, hjælper det at holde tællefelter overalt. mongodbs atomopdateringsmetode sammen med upsert-kommandoer gør det nemt at tælle op og tilføje felter til eksisterende dokumenter.
Det følgende er helt sikkert mangelfuldt, fordi det er skrevet fra toppen af mit hoved. Men bedre dårlige eksempler end ingen eksempler tænkte jeg;)
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
}
}
tilføje nyt tweet:
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);
Få de ti bedste links sorteret efter antallet af tweets, de har?
db.x.links.find().sort({'totalCount:-1'}).limit(10);
Få det mest tweetede link til en bestemt dato?
db.x.links.find({'$gt':{'daycount.123413453':0}}).sort({'daycount.123413453':-1}).limit(1); //123413453 is the day you're after
Få tweets til et link?
db.x.tweets.find({'links': 'http://lin.k'});
Få de ti seneste tweets?
db.x.tweets.find().sort({'timeTweeted': -1}, -1).limit(10);