MongoDB 查询与嵌套元素的行为不符合预期
MongoDB query doesn't behave as expected with nested elements
我正在尝试 return 结果匹配一个值并且匹配子属性。所以我想 return 说匹配月份的结果,然后匹配一系列值。然而,我发现即使是简单的搜索,似乎也没有 return 我期望的任何结果。
使用 pymongo 我的查询是:
month = 2
results = db.master.find({"months": str(month)})
这肯定会 return 正确月份的所有匹配文档。但是我没有记录 returns for 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 } )
它使用投影 return 仅匹配给定月份键的文档。
我正在尝试 return 结果匹配一个值并且匹配子属性。所以我想 return 说匹配月份的结果,然后匹配一系列值。然而,我发现即使是简单的搜索,似乎也没有 return 我期望的任何结果。
使用 pymongo 我的查询是:
month = 2
results = db.master.find({"months": str(month)})
这肯定会 return 正确月份的所有匹配文档。但是我没有记录 returns for 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 } )
它使用投影 return 仅匹配给定月份键的文档。