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

mst*_*ies 8 mongodb mongodb-query

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

  • 查询将根据搜索条件匹配一个文档
  • 如果找到匹配项,该文档将被返回
  • 如果未找到匹配项,则将在该位置返回另一个文档。第二个文档将符合另一组标准
  • 无论如何,理想情况下查询都会返回一条记录。

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

我尝试过使用{$or: [ { id: "bob" }, {id: "guest" } ]}and { id: { $in: [ "bob", "guest" ] } },但这两个命令都按顺序搜索集合,并根据先插入的内容返回“bob”或“guest”。

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

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

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

谢谢你!

小智 1

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