2015-10-14 60 views
0

下面是文檔:

{ 
    name:"james", 
    files:[ 
     {name:"file1.txt", content:"..."}, 
     {name:"file2.txt", content:"..."}, 
     {name:"file3.txt", content:"..."} 
    ], 
    status:4 
} 

想要讓查詢並返回:

  1. 所有根領域包括files

  2. files只包含file2.txt信息,coze content非常大,只對感興趣

我知道使用$elemMatch在查找查詢,如下圖所示:

db.collection.find(
    {'files':{$elemMatch:{name:'file2.txt'}} }, 
    {name:1, status:1, 'files.$':1 } 
) 

有什麼辦法避免列表中的所有投影領域,並得到所有的鑰匙?

要求:要求所有領域,但沒有列出關鍵(不列出name:1, status:1

+0

你在這裏要求什麼?如何同時包含'name'和'status'?當然,請在投影中詢問他們。 MongoDB的「投影」是「全部或全部」,所以如果你不要求它,你就不會得到它。在這種情況下,沒有等效的SQL *。要求**所有**你想要的領域。 [非常清楚地覆蓋在文檔中](http://docs.mongodb.org/manual/tutorial/project-fields-from-query-results/),當然除了['$ slice''](http: //docs.mongodb.org/manual/reference/operator/projection/slice/) –

回答

0

這是你問什麼,即返回所有領域,但對於files場僅返回「 files2.txt「價值?

db.collection.find({ 'files':{$elemMatch:{name:'file2.txt'}} }, { 'files.$':1, name:1, status:1 })