2017-05-04 20 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