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

MongoDB:如果另一个文档不存在,则返回该文档,mongodb,mongodb-query,Mongodb,Mongodb Query,我正在努力找到一种执行复合MongoDBfind()的好方法,其标准如下: 查询将根据搜索条件匹配一个文档 如果找到匹配项,将返回该文档 如果找不到匹配项,则会返回另一个文档。第二个文档将匹配另一组标准 理想情况下,无论发生什么情况,查询都只返回一条记录 在我的特殊情况下,我有一个用户的集合,其中包含用户及其相关权限的列表。它还包含一个包含默认权限的guest伪用户的特殊条目。如果没有准确的用户匹配,则需要返回此guest文档 我尝试过使用{$or:[{id:“bob”},{id:“gues

我正在努力找到一种执行复合MongoDB
find()
的好方法,其标准如下:

  • 查询将根据搜索条件匹配一个文档
  • 如果找到匹配项,将返回该文档
  • 如果找不到匹配项,则会返回另一个文档。第二个文档将匹配另一组标准
  • 理想情况下,无论发生什么情况,查询都只返回一条记录
在我的特殊情况下,我有一个
用户的集合
,其中包含用户及其相关权限的列表。它还包含一个包含默认权限的
guest
伪用户的特殊条目。如果没有准确的用户匹配,则需要返回此
guest
文档

我尝试过使用
{$or:[{id:“bob”},{id:“guest”}
以及
{id:{$in:[“bob”,“guest”]}}
,但这两种方法都会按顺序搜索集合,并根据首先插入的对象返回“bob”或“guest”

有没有一种方法可以显式地说find
bob
或者返回
guest
文档作为回退

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

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


谢谢大家!

如果您插入
guest
作为第一个对象,那么通过组合
limit
sort
by\u id,您可以解决这个问题

我认为不必使用find({}),您可以使用aggregate,在这种情况下,$in和$cond操作符可以解决您的问题。 您可以参考此链接->

嗯,我不知道存在
$cond
。这可能就行了,尽管最终结果会很长。我想知道是否有一种没有聚合的替代方法。。。