【问题标题】:Mongodb - Array containing element and not containing another oneMongodb - 包含元素但不包含另一个元素的数组
【发布时间】:2014-05-02 23:11:43
【问题描述】:

我正在尝试查询我的一个 mongodb 集合,如下所示:

> db.collection.find()
{name: "foo", things: [{stuff:"banana", value: 1}, {stuff:"apple", value: 2}, {stuff:"strawberry", value: 3}]}
{name: "bar", things: [{stuff:"banana", value: 4}, {stuff:"pear", value: 5}]}
...

我的目标是列出所有具有 things 字段的对象,该字段包含带有 stuff=banana 但没有 stuff=apple 的元素

我尝试过这样的事情:

db.transactions.find({
  "things": {
    $elemMatch: {
      "stuff": "banana", 
      $ne: {
        "stuff": "apple"
      }
    }
  }
)

但它不起作用。有什么想法吗?

【问题讨论】:

    标签: mongodb collections element contain


    【解决方案1】:

    以下查询将获取所有具有things 字段的文档的列表,该字段包含stuff=banana 但没有stuff=apple 的元素:

    db.test.find({"$and":[{"things.stuff":"banana"}, {"things.stuff":{$ne:"apple"}}]})
    

    【讨论】:

      【解决方案2】:

      使用 $in 和 $nin 来包含和排除

      db.transactions.find({
        "things.stuff": {
          $in: ["banana"], 
          $nin:["apple"]
        }
      })
      

      【讨论】:

        【解决方案3】:

        使用$not$and 运算符:

        db.collection.find({
        
           $and:[
            {"things": {$elemMatch: {  "stuff": "banana"  }}},
            {"things": {$not: {$elemMatch: { "stuff": "apple"}}}}
          ]
        
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-30
          • 1970-01-01
          • 2022-01-02
          • 2017-11-24
          • 2018-06-17
          • 2019-08-05
          相关资源
          最近更新 更多