对于下面的示例文档
{
"_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"]}})
但是上面没有回报。实现这一目标的正确方法是什么?
答案 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
嵌入式文档的文档。