我有一个系列,比方说,“事情”:
{ id: 1
creator: 1
created: Today }
{ id: 2
creator: 2
created: Today }
{ id: 3
creator: 2
created: Yesterday }
我想创建一个查询,它将返回由一组用户创建的每个Thing,但只返回他们最近创建的东西。
这会是什么样的?我可以使用一系列创建者搜索我的集合,它运行得很好 - 我怎样才能每个用户只获得最近创建的对象?
Thing.find({ _creator : { "$in" : creatorArray })...
答案 0 :(得分:3)
您不能find
,sort
只能在一个find()
查询中选择最新版本。但你可以使用聚合来做到这一点:
Match
所有记录,其中创建者是我们正在寻找的人之一
为。Sort
记录按降序排列,基于创建的字段。Group
基于创作者的文档。Project
必填字段。片段:
Thing.aggregate([
{$match:{"creator":{$in:[1,2]}}},
{$sort:{"created":-1}},
{$group:{"_id":"$creator","record":{$first:"$$ROOT"}}},
{$project:{"_id":0,
"id":"$record.id",
"creator":"$record.creator",
"created":"$record.created"}}
], function(err,data){
})