获取每个用户的最后创建 object?
Get last created object for each user?
我有一个 collection,比方说,"Things":
{ id: 1
creator: 1
created: Today }
{ id: 2
creator: 2
created: Today }
{ id: 3
creator: 2
created: Yesterday }
我想创建一个查询,该查询将 return 一组用户创建的每个事物,但仅限于他们最近创建的事物。
这会是什么样子?我可以用一系列创作者搜索我的 collection,它工作得很好 - 我怎么也只能得到每个用户最近创建的 object?
Thing.find({ _creator : { "$in" : creatorArray })...
您不能 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){
})
我有一个 collection,比方说,"Things":
{ id: 1
creator: 1
created: Today }
{ id: 2
creator: 2
created: Today }
{ id: 3
creator: 2
created: Yesterday }
我想创建一个查询,该查询将 return 一组用户创建的每个事物,但仅限于他们最近创建的事物。
这会是什么样子?我可以用一系列创作者搜索我的 collection,它工作得很好 - 我怎么也只能得到每个用户最近创建的 object?
Thing.find({ _creator : { "$in" : creatorArray })...
您不能 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){
})