我对mongodb的综合功能感到困惑。我想要的就是在我的收藏中找到最新的文档。让我们说每个记录都有一个字段"创建"
db.collection.aggregate({
$group: {
_id:0,
'id':{$first:"$_id"},
'max':{$max:"$created"}
}
})
产生正确的结果,但我希望结果中的整个文档?我该怎么做?
这是文件的结构:
{
"_id" : ObjectId("52310da847cf343c8c000093"),
"created" : 1389073358,
"image" : ObjectId("52cb93dd47cf348786d63af2"),
"images" : [
ObjectId("52cb93dd47cf348786d63af2"),
ObjectId("52f67c8447cf343509d63af2")
],
"organization" : ObjectId("522949d347cf3402c3000001"),
"published" : 1392601521,
"status" : "PUBLISHED",
"tags" : [ ],
"updated" : 1392601521,
"user_id" : ObjectId("52214ce847cf344902000000")
}
答案 0 :(得分:13)
在文档中,我发现 $$ROOT
表达式解决了这个问题。
来自DOC: http://docs.mongodb.org/manual/reference/operator/aggregation/group/#group-documents-by-author
答案 1 :(得分:3)
query = [
{
'$sort': {
'created': -1
}
},
{
$group: {
'_id':null,
'max':{'$first':"$$ROOT"}
}
}
]
db.collection.aggregate(query)
答案 2 :(得分:2)
db.collection.aggregate([
{
$group: {
'_id':"$_id",
'otherFields':{ $push: { fields: $ROOT } }
}
}
])
答案 3 :(得分:1)
我想我明白了。例如,我有一个包含图像(或指针)数组的集合。现在我想找到图像最多的文档
results=[];
db.collection.aggregate([
{$unwind: "$images"},
{$group:{_id:"$_id", 'imagecount':{$sum:1}}},
{$group:{_id:"$_id",'max':{$max: "$imagecount"}}},
{$sort:{max:-1}},
{$group:{_id:0,'id':{$first:'$_id'},'max':{$first:"$max"}}}
]).result.forEach(function(d){
results.push(db.stories.findOne({_id:d.id}));
});
现在最后一个数组将包含图像最多的文档。由于图像是一个数组,我使用$ unwind,然后按文档ID和$ sum:1进行分组,将其输入到找到最大值的$组中,将其管理为反向$ sort for max和$ group out第一个结果。最后,我获取文档并将其推入结果数组。
答案 4 :(得分:-3)
您应该使用db.collection.find()而不是db.collection.aggregate():
db.collection.find().sort({"created":-1}).limit(1)