如何在django mongoengine的两个嵌入场上应用滤波条件?

时间:2015-06-04 13:38:34

标签: python django mongodb mongoengine

我正在使用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.

任何人都知道如何进行符合上述条件的查询。

请求给我建议,即使是很少的帮助,建议对我有帮助。

提前致谢。

1 个答案:

答案 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)