首页 > 解决方案 > 返回嵌套数组的所有元素匹配的文档

问题描述

我正在尝试编写一个查询来返回所有文档 wheredescrtratt: "Chemioterapia"nomemed: "null".

这是我尝试过的:

db.pazienti.find({terapie: {$elemMatch: {descrtratt: "Chemioterapia", nomemed: "null"}}})

然而,我编写的查询返回数组中至少一个元素terapie匹配的文档,我想要的是返回terapie数组中所有元素匹配的所有文档。

考虑到下面这 4 个输入文档,返回的文档应该只有第 2 个和第 4 个。我的查询返回所有 4 个文档,我应该如何修复它?

{
"codf": "001", 
"nome": "Michelangelo", 
"cognome": "Milani", 
"terapie": [
    {
        "descrtratt": "Chemioterapia", 
        "nomemed": "null", 
    }, 
    {
        "descrtratt": "Chemioterapia",  
        "nomemed": "Busulfano",  
    }
    ]
}
{
"codf": "004", 
"nome": "Gigio", 
"cognome": "Battisti", 
"terapie": [
    {
        "descrtratt": "Chemioterapia", 
        "nomemed": "null", 
    }, 
    {
        "descrtratt": "Chemioterapia",  
        "nomemed": "null",  
    }
    ]
}
{
"codf": "007", 
"nome": "Giovanni", 
"cognome": "Bomba", 
"terapie": [
    {
        "descrtratt": "Chemioterapia", 
        "nomemed": "null", 
    }, 
    {
        "descrtratt": "Radioterapia",  
        "nomemed": "null",  
    }
    ]
}
{
"codf": "023", 
"nome": "Luca", 
"cognome": "Agostinelli", 
"terapie": [
    {
        "descrtratt": "Chemioterapia",  
        "nomemed": "null",  
    }
    ]
}

标签: mongodbmongodb-query

解决方案


$ne您可以在运算符中$elemMatch使用否定条件$nor

db.pazienti.find({
  $nor: [
    {
      terapie: {
        $elemMatch: {
          descrtratt: { $ne: "Chemioterapia" }
        }
      }
    },
    {
      terapie: {
        $elemMatch: {
          nomemed: { $ne: "null" }
        }
      }
    }
  ]
})

操场


推荐阅读