【问题标题】:MongoDB: return a document if another does not existMongoDB:如果另一个文档不存在则返回一个文档
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我认为您可以使用聚合而不是使用 find({}),而 $in 和 $cond 运算符可以解决您的问题。 你可以参考这个链接-> https://docs.mongodb.com/v3.2/reference/operator/aggregation/cond/

      【讨论】:

      • 嗯,我不知道$cond 存在。这可能会做到这一点,尽管最终结果会很长。我想知道是否有没有聚合的替代方式......
      猜你喜欢
      • 1970-01-01
      • 2014-09-29
      • 2019-02-16
      • 2013-10-04
      • 2018-04-10
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多