Skip to content

Instantly share code, notes, and snippets.

@barisusakli
Created September 11, 2014 05:07
Show Gist options
  • Save barisusakli/7536278bad6bfe8e2c70 to your computer and use it in GitHub Desktop.
Save barisusakli/7536278bad6bfe8e2c70 to your computer and use it in GitHub Desktop.
mongodb embedded array
var db = require('../database');
//create index on array score field, and members.value
db.client.collection('test').ensureIndex({"_key": 1, "members.score": 1}, {background:true},function(err) {
console.log(err);
});
// this is basically getSortedSetRange('experiment', 0, 3);
var pipeline = [
{$match: {_key: "experiment"}},
{$unwind: "$members"},
{$sort: {"members.score": -1}},
{$skip: 0},
{$limit: 3},
{$project: { _id: 0, value: '$members.value' }}
];
db.client.collection('test').aggregate(pipeline, {explain: false}, function(err, data) {
if (err) {
return res.json(500, err.message);
}
res.json(data);
});
// this is sortedSetAdd('experiement', 8, 'item4');
// except it doesnt update existing elements when its called again with a different score :(
db.client.collection('test').update(
{
_key : "experiment",
"members.value" : {$ne : "item4" }
},
{
$addToSet : {"members" : {'value' : "item4" , 'score': 8 }}
},
{
upsert:false, w:1
}, function(err) {
console.log(err);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment