(布尔逻辑)在MongoDB中使用布尔逻辑时,对于重复的键有什么解决方法?

0x6upsns  于 2022-11-22  发布在  Go
关注(0)|答案(1)|浏览(146)

当我尝试查询数据库中的多个类别时,例如:

Example: {
  "AttributeA": type,
  "AttributeB": type,
  "AttributeC": type,
  "AttributeD": type
etc...
}

假设我正在尝试查询具有(AttributeA匹配条件1或AttributeB匹配条件2)和(AttributeC匹配条件3、4、5或6)的样本,我们如何在MongoDB中编写.find()方法,以进行无错误或复杂布尔代数(分配“and”)的匹配?
我尝试过使用如下表示法:

db.Example.find({
  $or:[{"AttributeA" : criteria1, "AttributeB" : criteria2}],
  $or:[{"AttributeC" : criteria3, "AttributeC" : criteria4, ...}]
})

在试图满足上述条件的简单查询中,但在某些情况下,这将导致仅满足查询的一个条件(在编译之前给出“重复键'$or'”警告),而在其他情况下(不同平台),这直接给出沿着警告线的错误。

bihw5rsg

bihw5rsg1#

如果我对这个问题的理解正确的话,我想您正在寻找一个查询 predicate ,例如:

{
  $or: [
    {
      AttributeA: "criteria1"
    },
    {
      AttributeB: "criteria2"
    }
  ],
  AttributeC: {
    $in: [
      "criteria3",
      "criteria4",
      "criteria5"
    ]
  }
}

了解如何在this playground example上运行
我们如何在MongoDB中编写.find()方法来匹配,而不需要...复杂的布尔代数(分配“and”)?
默认情况下,MongoDB applies an implicit $and operator用于查询同一级别的 predicate 。还有一个显式运算符可用,但在您的情况下不需要它。您可以允许数据库为您分配逻辑上为$and的条件。
属性C匹配条件3、4、5或6
这是the $in operator的一个完美用法,我在上面的查询中使用了它:

AttributeC: {
    $in: [ "criteria3", "criteria4", "criteria5" ]
  }

相关问题