假设我有一个患者数据库,每个患者可能有多个物理地址,因此数据库有一个地址数组。我想找到某个患者,并且只返回地址数组中每个地址的某个字段。
如果我使用这个,我成功获得每个地址的每个地址(数组成员)和每个细节(街道,数字,城市,邮编等):
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 :(得分:0)
如果只想获得匹配的数组中特定地址的地址(或其详细信息/子节点),我认为它不可能在MongoDB中使用。您必须依赖应用程序端匹配。
如果您想获得的只是特定地址字段的projection
,那么您正在做的事情已经在正确的轨道上。
以下查询不起作用,因为您正在预测数据库中不存在的field
Address.0
。您可以预测Address.city
或Address.vicinity
,但它不会仅返回与查询匹配的那个。
db.Patients.find( { "LastName": "Smith" }, { "Addresses.0": 1 } )
虽然它将返回文档中与您的查询匹配的所有地址
,但它仍然有效db.Patients.find( { "LastName": "Smith" }, { "Addresses.City": 1 } )