MongoDB:如果另一个文档不存在,则返回文档

时间:2016-12-14 01:41:58

标签: mongodb mongodb-query

我正在努力寻找一种使用以下标准执行复合MongoDB find()的好方法:

  • 查询将根据搜索条件匹配一个文档
  • 如果找到匹配项,则会返回该文档
  • 如果未找到匹配项,则会返回另一个文档。第二份文件将与另一组标准相匹配
  • 无论如何,查询最好只返回一条记录。

在我的特定情况下,我有一个users的集合,其中包含用户列表及其相关权限。它还包含guest伪用户的特殊条目,其中包含默认权限。如果没有发生确切的用户匹配,则此guest文档是需要返回的文档。

我已尝试使用{$or: [ { id: "bob" }, {id: "guest" } ]}以及{ id: { $in: [ "bob", "guest" ] } },但这两个都按顺序搜索集合并返回" bob"或"客人"取决于首先插入的。

有没有办法明确说明查找bob或作为后备,请返回guest文档?

请记住,这将从Node.js执行,因此我正在寻找一个干净的&将此文件卸载到MongoDB的简单方法。

我意识到这可以作为两个查询完成,但我想尽可能避免这种情况。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您插入guest作为第一个对象,那么通过_id组合limitsort,您可以解决此问题!

答案 1 :(得分:0)

我认为不是使用find({}),而是使用聚合,而$ in和$ cond运算符可以解决您的问题。 你可以参考这个链接 - > https://docs.mongodb.com/v3.2/reference/operator/aggregation/cond/