首页 > 解决方案 > 如何形成一个精确的查询来查找数组内部的 id

问题描述

我有这样的文件:

{
    "_id" : ObjectId("xxx"),
    "users" : [ 
        {
            "_id" : ObjectId("xxx")
        }, 
        {
            "_id" : ObjectId("yyy")
        }
    ]
}

users 是一个数组,可以包含两个或两个以上的对象。
如果我必须通过 mongo 查询严格请求两个对象,我该怎么做?

.find({ 
    "users._id" : { $in: [ObjectId("xxx"), ObjectId("yyy")] }
})

上面的查询将获取其中包含 xxx 用户或 yyy 用户的所有文档。我如何形成一个查询,如果 xxx 和 yyy 都在那里,那么只有那个 doc 会被获取。
如果您需要更多信息来理解问题,请告诉我。非常感谢您的帮助。

标签: arraysmongodbmongoosemongodb-queryaggregation-framework

解决方案


您应该使用$all来强制需要数组中的所有 id 进行匹配,但仅靠它自己是不够的,因为您仍然需要将文档与这两个用户 + 其他用户进行匹配。

为了解决这个问题,您还必须确保users数组的大小为 2,您可以这样做:

db.collection.find({
  $and: [
    {
      "users._id": {
        $all: [
          ObjectId("609a80e3c548140e5859d6de"),
          ObjectId("60136b272c1e946545da6204")
        ]
      }
    },
    {
      "users.2": {
        $exists: false
      }
    }
  ]
})

蒙戈游乐场


推荐阅读