mongodb - 仅当数组中的所有元素都匹配 MongoDb 中的条件时才获取文档

标签 mongodb mongodb-query

我正在尝试删除所有孤儿项目。在 db 中,我需要获取所有用户都被删除的项目。已经尝试使用下面的查询,但它总是在删除字段不存在的情况下给出结果。

db.projects.find({
  "user_list": {
     $not: {
       $elemMatch: {
         "deleted": false
       }
   }
 },
 "user_list.deleted": {$exists: true}
}, {"user_list": 1})
需要帮助编写查询以获取删除所有用户的唯一项目。例如,在下面的示例中,我应该只获取第二个文档。
项目列表
/* 1 */
{
    "_id" : ObjectId("636a6aa584d5f92f14f0c548"),
    "user_list" : [ 
        {
            "deleted" : false,
            "user_id" : "602cf72a3fcad3cc605b8d59"
        },
        {
            "deleted" : true,
            "user_id" : "602cf72a3fcad3cc605b8d50"
        }
    ]
}

/* 2 */
{
    "_id" : ObjectId("602e443bacdd4184511d6e29"),
    "user_list" : [ 
        {
            "deleted" : true,
            "user_id" : "602cf72a3fcad3cc605b8d59"
        }, 
        {
            "deleted" : true,
            "user_id" : "602cf72a3fcad3cc605b8d59"
        }, 
        {
            "deleted" : true,
            "user_id" : "602cf72a3fcad3cc605b8d59"
        }
    ]
}

/* 3 */
{
    "_id" : ObjectId("60332242acdd4184511ed664"),
    "user_list" : [ 
        {
            "deleted" : true,
            "user_id" : "602cf72a3fcad3cc605b8d59",
        }, 
        {
            "deleted" : true,
            "user_id" : "602cf72a3fcad3cc605b8d59"
        }, 
        {
            "user_id" : "602cf72a3fcad3cc605b8d59"
        }
    ]
}

最佳答案

您可以使用 $nin 过滤掉 falsenull值。

db.projects.find({
  "user_list.deleted": {
    $nin: [
      false,
      null
    ]
  }
})
MongoDB Playground

关于mongodb - 仅当数组中的所有元素都匹配 MongoDb 中的条件时才获取文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66311613/

相关文章:

Mongodb - 多文本索引 : Index key pattern too large error code 67

node.js - Mongoose 找到返回的奇怪对象

mongodb - Mongo 按数组中的匹配计数排序

javascript - db.runCommand 意外标记非法

javascript - 如何查询子数组中的条目与所有条件匹配的文档?

java - 从 mongo 更新内部文档

javascript - 未处理的PromiseRejection警告: | DeprecationWarning: | Mongoose 5

mongodb - 如何在 MongoDB C# 驱动程序版本 2 中使用 $ 位置运算符

mongodb - 在出现错误的情况下重新创建 mgo session (读取 tcp 127.0.0.1 :46954->127. 0.0.1:27017: i/o 超时)

python - MongoDB引用参数值