为每个用户获取最后创建的对象?

时间:2015-04-30 01:17:37

标签: node.js mongodb mongoose

我有一个系列,比方说,“事情”:

{ id: 1
    creator: 1
    created: Today }
{ id: 2
    creator: 2
    created: Today }
{ id: 3
    creator: 2
    created: Yesterday }

我想创建一个查询,它将返回由一组用户创建的每个Thing,但只返回他们最近创建的东西。

这会是什么样的?我可以使用一系列创建者搜索我的集合,它运行得很好 - 我怎样才能每个用户只获得最近创建的对象?

Thing.find({ _creator : { "$in" : creatorArray })...

1 个答案:

答案 0 :(得分:3)

您不能findsort只能在一个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){
   })