Python MongoDB查询没有';使用嵌套元素时,不会表现出预期的行为

Python MongoDB查询没有';使用嵌套元素时,不会表现出预期的行为,python,regex,mongodb,pymongo,Python,Regex,Mongodb,Pymongo,我试图返回与值匹配的结果,并且在子属性上也匹配。所以我想返回匹配月份的结果,然后匹配一系列值。然而,我发现即使是简单的搜索,似乎也不会返回我所期望的任何结果 使用pymongo,我的查询是: month = 2 results = db.master.find({"months": str(month)}) 这肯定会返回正确月份的所有匹配文档。但是,我没有收到月=2的记录返回 我的数据以以下形式存储在MDB中: { "_id": { "$oid": "568d0bebc

我试图返回与值匹配的结果,并且在子属性上也匹配。所以我想返回匹配月份的结果,然后匹配一系列值。然而,我发现即使是简单的搜索,似乎也不会返回我所期望的任何结果

使用pymongo,我的查询是:

month = 2
results = db.master.find({"months": str(month)})
这肯定会返回正确月份的所有匹配文档。但是,我没有收到月=2的记录返回

我的数据以以下形式存储在MDB中:

{
    "_id": {
        "$oid": "568d0bebc1bed847da7a2e6f"
    },
    "months": {
        "2": {
            "std_rank": 0.11338862902393358,
            "rank_gain": 0.6183933826187626,
            "gain": 0.9618213660245183,
            "std": 0.021891473641317716
        },
    "months": {
        "3": {
            "std_rank": 0.11338862902393358,
            "rank_gain": 0.6183933826187626,
            "gain": 0.9618213660245183,
            "std": 0.021891473641317716
        },   
    },
    "code": "VU"
}
一个建议的答案适用于过滤正确的月份,现在的问题是如何将过滤器应用于其子元素。例如:

results = db.master.find({}, {"_id": 0, "months." + str(month): 1, "months.std_rank": {"$lte": max_std_rank, "$gte": min_std_rank} } )
我得到以下错误:

pymongo.errors.OperationFailure: database error: Can't canonicalize query: BadValue >1 field in obj: { $gte: 0.0, $lte: 1.0 }

请尝试以下查询

results = db.master.find({ "months." + str(month) + ".std_rank": {"$lte": max_std_rank, "$gte": min_std_rank } }, { "_id": 0, "months." + str(month): 1 } )

它使用投影只返回与给定月份键匹配的文档。

也许您正在寻找投影作为
db.master.find({},{u id:0,“months.2”:1})
我不使用python,但您需要使用2来表示月份,可能类似于
month=2;db.master.find({“months”+str(month):{$exists:true}}})
@chridam有助于将字段缩小到month=2例如,接下来,如何过滤子值。请尝试
results=db.master.find({“months”+str(month)+“.std_秩”:{“$lte max_std_秩,$gte”:min_秩},{“id”:0,“months.”+str month:1})
@chridam谢谢-非常有用,MDB当时感觉非常粗糙。为每个人创造一个答案怎么样。