2017-06-18 67 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 })