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

8

我正在努力寻找一种执行MongoDB复合find()的好方法,其中包含以下标准:

  • 查询将基于搜索条件匹配一个文档
  • 如果找到匹配项,则返回该文档
  • 如果未找到匹配项,则返回另一个文档。第二个文档将与另一组条件相匹配
  • 无论如何,查询都应精确地返回一个记录。

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

我尝试使用{$or: [ { id: "bob" }, {id: "guest" } ]}以及{ id: { $in: [ "bob", "guest" ] } },但这两个选项是按顺序搜索集合的,并且根据先插入哪个值而返回“bob”或“guest”。

有没有一种明确地查找bob或作为后备,返回guest文档的方法?

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

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

谢谢!

2个回答

1
如果您将guest作为第一个对象插入,然后通过_id的limitsort组合,您就可以解决这个问题!


0

嗯,我不知道$cond的存在。尽管最终结果可能会非常长,但这可能正是所需要的。我在想是否有其他不需要使用聚合的替代方法... - mstubbies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接