通过嵌套数组的值搜索父数组的值

时间:2015-09-15 15:45:13

标签: mongodb

在我的收藏中,我有县。每个县都有多个城市。每个城市至少都有邮政编码,但有些还有更多。

因此,县文档(或对象)看起来像这样:

{
name: XYZ,
cities:
    [
    {name: ZYX,
    zipCodes: [{zip1:1234},{zip2:5678}]},
    {name: ZYX,
    zipCodes: [{zip1:4321},{zip2:8765}]}
    ]
}

我想找到带有给定邮政编码的城市名称。为此,我尝试了以下查询:

db.county.find({"cities.zipCodes.zipcode":1234},{"name":1, "_id":0});

但结果是该县的所有城市名称都有给定的邮政编码。即使我要查找的城市名称在列表中,我也希望仅收到该城市的名称。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

尝试使用Positional Operator

db.county.find({"cities.zipCodes.zipcode":1234},{"$.name":1, "_id":0});

或者

db.county.find({"cities.zipCodes.zipcode":1234},{"cities.$.name":1, "_id":0});

(虽然后者对我来说似乎更正确,但前提是前者假设您的初始查询符合您的意思)

答案 1 :(得分:0)

深入挖掘mongoDB引用后,我们找到了我正在寻找的查询:

class TheClass():
    @convertparameters
    def func1(self, data, params, interval):
        ....   

    @convertparameters
    def func2(self, data, params):
        ....

我需要的是$ unwind和$ match聚合运算符。

第一个$ unwind按城市分隔县,下一个按邮政编码分隔城市。因此,每个邮政编码都会有一个单独的“文档”。在此之后,当我使用$ match运算符时,它将仅返回具有给定邮政编码的数组中的字段。