我正在努力寻找一种执行MongoDB复合find()
的好方法,其中包含以下标准:
- 查询将基于搜索条件匹配一个文档
- 如果找到匹配项,则返回该文档
- 如果未找到匹配项,则返回另一个文档。第二个文档将与另一组条件相匹配
- 无论如何,查询都应精确地返回一个记录。
在我的特定情况下,我有一个users
集合,其中包含用户及其关联权限的列表。它还包含一个guest
伪用户的特殊条目,其中包含默认权限。如果没有精确的用户匹配,就需要返回这个guest
文档。
我尝试使用{$or: [ { id: "bob" }, {id: "guest" } ]}
以及{ id: { $in: [ "bob", "guest" ] } }
,但这两个选项是按顺序搜索集合的,并且根据先插入哪个值而返回“bob”或“guest”。
有没有一种明确地查找bob
或作为后备,返回guest
文档的方法?
请记住,这将从Node.js执行,因此我正在寻找一种干净且简单的方法将其卸载到MongoDB。
我意识到这可以作为两个查询来完成,但如果可能,我想避免这种情况。
谢谢!
$cond
的存在。尽管最终结果可能会非常长,但这可能正是所需要的。我在想是否有其他不需要使用聚合的替代方法... - mstubbies