检查MongoDB中数组的所有元素中是否存在字段,并返回包含它的文档

时间:2017-05-04 09:17:48

标签: mongodb

对于下面的示例文档

{
 "_id" : ObjectId("58f5ae159dfbbf2c98041952"),
 "patient" : {
  "drug" : [ 
 {
    "drugstartdate" : "20151007",
    "actiondrug" : "1",
    "openfda": {
     //some fields here
    }
 },
 {
  //details of one more drug that may or may not contain openfda field
 }
 ]
},
{//Second report
},.....

如何返回包含" openfda"的文档(报告)药物阵列中所有药物成分的子文件?尝试以下方法:

db.getCollection('collname').find({"patient.drug":
{$elemMatch:{"openfda":
{$exists:true}
}
}
})

$ elemMatch将返回至少一个药物包含的所有报告" openfda"领域。还尝试过:

db.getCollection('BigFDAData_05_06').find({"patient.drug":
{$all:["openfda"]}})

但是上面没有回报。实现这一目标的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用$elemMatch查询运算符。没有直接查询运算符来解决您的情况。

db.collname.find( { "patient.drug":  { $not: { $elemMatch: { openfda: {$exists:false} } } } } )

"$elemMatch" + "$exists:false"

此部分包含patient.drug数组中至少有一个openfda嵌入文档的所有文档。

$not

此部分将保留所有不在"$elemMatch" + "$exists:false"的文件。

这些是所有drugs数组都包含openfda嵌入式文档的文档。