2014-03-07 43 views
0

我有這樣MongoDB中的文檔 -如何限制它具有陣列MongoDB的文檔查詢的結果

{ 
name: "Myname", 
Auth: "myAuth", 
Books:[{ 
     b_name: "bookname", 
     b_type: "tech", 
     datetime: "datetime" 
    }], 
dept: "IT" 
} 

現在,如果我只是想根據過濾條件來獲得name字段中,我可以查詢像 -

db.books.find({ dept: "IT" } , { Myname:1, Auth:1, _id:0 }) 

但是,如果我想獲得一個單一的領域,以及在陣列"Books"數組字段中的一個,我該如何查詢MongoDB

我想是這樣 -

db.books.find({ dept: "IT" } , { Myname:1, Auth:1, Books.b_name:1, _id:0 }) 

上面的查詢將無法正常工作。

+0

這就是你想要的數目進行限制的問題數組元素返回?或者在查詢中有語法錯誤?如果您的問題是前者,請使用['$ slice'](http://docs.mongodb.org/manual/reference/operator/projection/slice/) – numbers1311407

+0

@ numbers1311407 $ slice只在數組中的位置相關**是已知**否則推薦使用投影和* match *運算符。 –

回答

1

投影屬性是JSON/doccument字段。你沒有像Myname這樣的字段。其次,你必須使用的子文件,如 'Books.b_name'

查詢報價:

db.books.find({ dept: "IT" } , { name:1, 'Auth':1, 'Books.b_name':1, _id:0 }) ; 

輸出:

{ "name" : "Myname", "Auth" : "myAuth", "Books" : [ { "b_name" : "bookname" } ] } 
+0

我建議任何能夠查看編輯歷史記錄的人,因爲您似乎有編輯您的答案的歷史,可以查看其他人的結果。很傷心你看起來像這樣絕望。 –

+0

要點是「爲讀者」,這張海報有提交**錯誤答案的歷史**,然後從別人處複製正確的答案。從評論中可以看出,缺乏理解延伸到**不理解**如何標記正確評論該帖子的另一用戶。請考慮評估您的投票。 –

+0

Sumeet,是的,我只是在名稱字段中輸入錯字。你是正確的,我也試過你的查詢與報價,它的工作。謝謝您的幫助。 – Arpan