我正在使用django和mongoengine。我试过所有查询顶部解决这个问题。我也试过原始查询但没有成功。
{
"_id" : ObjectId("556fe5c338a01311c4c4d1c1"),
"uuid" : "5c8ae1dfcb1d060d5a951d96d4798a84cdf090e9",
"snapshot_values" : [{
"key" : "gender",
"value" : "Female",
}, {
"key" : "marital_status",
"value" : "married",
}],
},
{
"_id" : ObjectId("556fe5c338a01311c4c4d1c1"),
"uuid" : "5c8ae1dfcb1d060d5a951d96d4798a84cdf090e9",
"snapshot_values" : [{
"key" : "gender",
"value" : "Female",
}, {
"key" : "marital_status",
"value" : "unmarried",
}],
},
{
"_id" : ObjectId("556fe5c338a01311c4c4d1c1"),
"uuid" : "5c8ae1dfcb1d060d5a951d96d4798a84cdf090e9",
"snapshot_values" : [{
"key" : "gender",
"value" : "Female",
}, {
"key" : "marital_status",
"value" : "married",
}],
},
在这里,我想应用那些拥有key = marital_status和value =已婚的数据。
condition1:
{key=marital_status, value=married}, will return two data,
condition:2
{key=marital_status,value=unmarried}, and {key=gender,value=female}, will return singe raw data from above data.
任何人都知道如何进行符合上述条件的查询。
请求给我建议,即使是很少的帮助,建议对我有帮助。
提前致谢。
答案 0 :(得分:2)
对于第一个条件,请尝试以下查询,该查询使用 dot notation 来访问数组的元素并访问嵌入文档的字段:
db.user.find({
"snapshot_values.key": "marital_status",
"snapshot_values.value": "married"
})
对于第二个条件,请使用以下利用 $in
运算符的查询:
db.user.find({
"snapshot_values.key": { "$in": ["marital_status", "gender"] },
"snapshot_values.value": { "$in": ["unmarried", "female"] }
})
- 更新 -
django mongoengine版本应该类似于以下示例,您可以使用 Q class :
对于第一个条件
Person_Snapshot.objects(Q(snapshot_values__key="marital_status") & Q(snapshot_values__value="marries")
第二个条件(使用 query operator )
key_list = ["marital_status", "gender"]
value_list = ["unmarried", "female"]
Person_Snapshot.objects(Q(snapshot_values__key__in=key_list) & Q(snapshot_values__value__in=value_list)