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

我正在尝试删除所有孤儿项目。在 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 游乐场


以上是仅当数组中的所有元素都匹配MongoDb中的条件时才获取文档的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>