2017-05-04 89 views
0

样本文档像下面检查,并返回包含它的

{ 
"_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将回到那里ATLEAST一个药含有 “openfda” 字段中的所有报告。还尝试过:

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

但是,上述内容没有任何回报。什么是实现这一目标的正确途径?

回答

1

您可以使用$elemMatch查询运算符。没有直接的查询操作员来解决您的问题。

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

"$elemMatch" + "$exists:false"

这部分包括了所有在那里patient.drug阵列不具备至少一个openfda嵌入文档的文件。

$not

这部分将保持所有这些都没有在"$elemMatch" + "$exists:false"的文件。

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

+0

这是一个'$不是'需要!谢谢,@Veeram。 – ABB