Mongodb - 包含元素但不包含另一个元素的数组

Posted

技术标签:

【中文标题】Mongodb - 包含元素但不包含另一个元素的数组【英文标题】:Mongodb - Array containing element and not containing another one 【发布时间】: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"
      
    
  
)

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

【问题讨论】:

【参考方案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"
  ]

);

【讨论】:

以上是关于Mongodb - 包含元素但不包含另一个元素的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MongoDB 中打印数组元素的计数以及另一个变量

MongoDB:如何找出数组字段是不是包含元素?

检查数组是不是包含元素 mongodb

返回文档,其中数组元素包含输入数组的所有值 | MongoDB

查找 Mongodb 文档,如果它包含 mongoose 中的数组中的元素

我无法在 req mongoDB 的 json 中引入新元素 con JS (nodeJS)