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

仅当数组中的所有元素都与MongoDb中的条件匹配时才能获取文档,mongodb,mongodb-query,Mongodb,Mongodb Query,我正在尝试删除所有孤立项目。在db中,我需要获取删除所有用户的项目。已经尝试了下面的查询,但它总是在缺少删除字段的地方给出结果 db.projects.find({ "user_list": { $not: { $elemMatch: { "deleted": false } } }, "user_list.deleted": {$exists: true} }, {

我正在尝试删除所有孤立项目。在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"
        }
    ]
}
应该给你所有没有删除===false记录的项目

您可以使用
$ne:null
将null设置为
已删除
以避免它们

更新: 从…起 我可以想象下面的代码可以工作,但当我在本地机器上运行它时,它是无效的。这可能是因为筑巢

{ user_list.deleted: { $ne: false, $exists: true } }
但这一个有效

 { user_list.deleted: { $ne: false, $ne: null } }
尝试此查询。我认为它应该适用于所有提到的情况。

您可以使用过滤掉
false
null

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

您也可以检查字段是否存在。谢谢@prasad_uuyeah,我也尝试过,但没有结果。让我更新我尝试过的查询。谢谢@Anil,但这仍然是第二条和第三条记录。这不是你想要的第二条结果吗
当所有用户都被删除时,我试图获取项目。
是的,我需要第二个,但您的查询会获取第二个和第三个结果,正如我最初所说的,您可以添加
$和:$ne:null
,就像我在最后显示的那样获取结果。@AnilMaharjan
{user_list.deleted:{$ne:false,$ne:null}
将只过滤掉
null
值,因为
{$ne:null}
覆盖了上一个查询。它与
{user_list.deleted:{$ne:null}}
对我不起作用。
db.projects.find({ $and: [ 
              { "user_list" : { $in : ["deleted"] } },   
              { "user_list" : { $elemMatch : { "deleted" : true} } },   
              { "user_list" : { $elemMatch : { "deleted" :{$ne:false}} } } ]});
db.projects.find({
  "user_list.deleted": {
    $nin: [
      false,
      null
    ]
  }
})