首页 > 解决方案 > 选择数组的所有对象都具有某些值的文档

问题描述

晚上好,我在浏览 MongoDB 文档和理解如何执行一个简单的查询时遇到了麻烦,否则看起来像什么。

让我们假设我有以下文件:

{
   "user_name": "john doe"
   "friendsList": [
      {"name": "maria"}, 
      {"name": "maria"},
      {"name": "maria"}
   ]
}

我想通过"user_name": "john doe"(它是唯一的)检索文档,但前提是friendsList数组中的所有对象都具有name = maria. 换句话说,上面的 Document 将被返回,但下面表示的将导致no matches.

{
   "user_name": "john doe"
   "friendsList": [
      {"name": "maria"}, 
      {"name": "stryx"},
      {"name": "maria"}
   ]
}

我曾尝试使用$all查询选择器等,但所有这些都会导致数组中至少有一个对象匹配的行为。

标签: mongodb

解决方案


尝试$elemMatch$not运营商,

  • $elemMatchwithname不等于maria和否定检查使用$notelemMatch 结果这意味着所有元素都应包含maria名称
  • $ne忽略空friendList,这是可选的
db.collection.find({
  user_name: "john doe",
  "friendsList": {
    $ne: [],
    $not: {
      $elemMatch: {
        name: { $ne: "maria" }
      }
    }
  }
})

操场


推荐阅读