我有一个集合,其中有几个文档,其中包含使用其他系统处理的作业。我在这个表中查找了5个对象:
Work.find({status: 'new'})
.sort({priority: 'desc'})
.limit(5)
.exec(function (err, work){})
这些文档中还有另一个字段,它确定只能同时运行具有给定唯一值的一个作业。
例如这3个职位:
{uniqueVal: 1, priority: 1, type: "scrape", status:"new"}
{uniqueVal: 1, priority: 1, type: "scrape", status:"new"}
{uniqueVal: 2, priority: 1, type: "scrape", status:"new"}
有2条uniqueVal为1的记录。有什么办法可以只用1来拉一条记录吗?
注意:这些值不是像示例中那样的预定值,它们是其他文档的ObjectIds。
我查看了Distinct(),但似乎它只返回实际的唯一值,而不是文档本身。
答案 0 :(得分:2)
我认为最好的选择是使用聚合。
你可以通过uniqueVal $分组 http://docs.mongodb.org/manual/reference/operator/aggregation/group/#pipe._S_group
并将$ first用于其他值 http://docs.mongodb.org/manual/reference/operator/aggregation/first/#grp._S_first