【发布时间】:2016-12-14 01:41:58
【问题描述】:
我正在努力寻找一种使用以下标准执行复合 MongoDB find() 的好方法:
- 查询将根据搜索条件匹配一个文档
- 如果找到匹配项,将返回该文档
- 如果未找到匹配项,则会在原处返回另一个文档。第二个文档将匹配另一组标准
- 无论如何,理想情况下,查询都会返回一条记录。
在我的特定情况下,我有一个 users 集合,其中包含用户列表及其相关权限。它还包含一个包含默认权限的guest 伪用户的特殊条目。如果没有发生精确的用户匹配,则需要返回此 guest 文档。
我尝试过使用{$or: [ { id: "bob" }, {id: "guest" } ]} 和{ id: { $in: [ "bob", "guest" ] } },但这两种方法都按顺序搜索集合,并会根据先插入的返回“bob”或“guest”。
有没有办法明确地说 find bob 或作为后备,返回 guest 文档?
请记住,这将从 Node.js 执行,因此我正在寻找一种干净且简单的方法将其卸载到 MongoDB。
我意识到这可以通过两个查询来完成,但我想尽可能避免这种情况。
谢谢!
【问题讨论】:
标签: mongodb mongodb-query