【问题标题】:How to find documents with unique records in MongoDB?如何在 MongoDB 中查找具有唯一记录的文档?
【发布时间】:2021-08-05 15:59:02
【问题描述】:

我有一个集合,其中包含要使用另一个系统处理的作业的多个文档。我从这个表中查找 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 的记录吗?

注意:这些值不是示例中的预先确定的值,它们是其他文档的 ObjectId。

我查看了 Distinct(),但它似乎只返回实际的唯一值,而不是文档本身。

【问题讨论】:

标签: node.js mongodb mongoose nosql


【解决方案1】:

我认为最好的选择是使用聚合。

您可以通过 uniqueVal 进行 $group 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

【讨论】:

  • 感谢您的信息。我已经开始进行聚合,但遇到了一些问题。似乎聚合返回了全新的文档。我希望我的实际工作对象包含每个字段。 _id 必须是工作对象的 _id,而不是我的唯一值。 $group 似乎正好相反。
  • 但也许我可以使用它来获取具有工作对象 _id 的唯一对象列表,然后运行 ​​$or 查询以仅拉回这些文档。我想我可以做到这一点
  • 在 $group 阶段你可以做 {$group: {_id: "$uniqueVal", tmpId: {$first: "$_id"}}}
  • 是的,这就是我所做的,而且效果很好,谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
相关资源
最近更新 更多