2017-06-18 37 views
0

假設我有一個患者數據庫,每個患者可能有多個物理地址,因此數據庫具有地址數組。我想查找某個Patient並從地址數組中的每個地址返回一個特定字段。從特定數組獲取特定字段

如果我用這個,我成功地讓每一個地址(數組成員)和每一個細節每一個地址(街道,號碼,城市,郵編等):

db.Patients.find({ "LastName": "Smith" }, { "Addresses": 1 }) 

我試試這個,希望能獲得第一個地址

db.Patients.find({ "LastName": "Smith" }, { "Addresses.0.City": 1 }) 

的唯一城市或我試試這個(簡化的東西),希望得到的(只)的第一個地址的所有細節

db.Patients.find({ "LastName": "Smith" }, { "Addresses.0": 1 }) 

相反,在這兩種情況下,我都會爲地址的空文檔獲取患者記錄。但我不明白爲什麼?

謝謝!

+0

文檔中返回所有的地址我們也沒有。也許你應該在你的問題中顯示你的文檔。 [請編輯您的問題以顯示該文檔。](https://stackoverflow.com/posts/44615436/edit) –

+0

您是否嘗試過'db.Patients.find({「LastName」:「Smith」},{「Addresses .City「:1})'? – Veeram

+0

看看你以前的問題[只檢索子文檔中的一些字段](https://stackoverflow.com/questions/44600321/retrieve-only-some-fields-from-sub-document)這實際上是由我自己改名的你將這個結構稱爲「一個數組」,這似乎是合乎邏輯的,你還沒有從中吸取教訓。類似於「{」地址「:{」Home「:{」street「:」...「,」city「:」...「},」Work「:{...}}}你真的有,是**不是**數組。這就解釋了爲什麼您在投影中使用的符號不會返回任何內容。 –

回答

0

如果只想獲得匹配數組中特定地址的地址(或其詳細信息/子元素),我認爲在MongoDB中不可能。你將不得不依靠應用程序端匹配。

如果你想得到的只是一個特定地址字段的projection,那麼你正在做的事情已經在正確的軌道上。

以下查詢不起作用,因爲您在投影數據庫中不存在的fieldAddress.0。您可以項目Address.cityAddress.vicinity,但它不會僅返回與查詢匹配的那個。

db.Patients.find({ "LastName": "Smith" }, { "Addresses.0": 1 }) 

這一個將工作雖然會符合您查詢

db.Patients.find({ "LastName": "Smith" }, { "Addresses.City": 1 })