在我的收藏中,我有县。每个县都有多个城市。每个城市至少都有邮政编码,但有些还有更多。
因此,县文档(或对象)看起来像这样:
{
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});
但结果是该县的所有城市名称都有给定的邮政编码。即使我要查找的城市名称在列表中,我也希望仅收到该城市的名称。
我该怎么办?
答案 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运算符时,它将仅返回具有给定邮政编码的数组中的字段。