从特定数组中获取特定字段

时间:2017-06-18 13:20:54

标签: arrays mongodb

假设我有一个患者数据库,每个患者可能有多个物理地址,因此数据库有一个地址数组。我想找到某个患者,并且只返回地址数组中每个地址的某个字段。

如果我使用这个,我成功获得每个地址的每个地址(数组成员)和每个细节(街道,数字,城市,邮编等):

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

我试试这个,希望只获得第一个地址的城市

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

或者我试试这个(为了简化事情),希望得到(仅)第一个地址的所有细节

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

相反,在这两种情况下,我都会获得带有地址的空文档的患者记录。但我不明白为什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果只想获得匹配的数组中特定地址的地址(或其详细信息/子节点),我认为它不可能在MongoDB中使用。您必须依赖应用程序端匹配。

如果您想获得的只是特定地址字段的projection,那么您正在做的事情已经在正确的轨道上。

以下查询不起作用,因为您正在预测数据库中不存在的field Address.0。您可以预测Address.cityAddress.vicinity,但它不会仅返回与查询匹配的那个。

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

虽然它将返回文档中与您的查询匹配的所有地址

,但它仍然有效
db.Patients.find( { "LastName": "Smith" }, { "Addresses.City": 1 } )