Python pymongo中的多查询
我有以下结构的mongoDB项目:Python pymongo中的多查询,python,mongodb,pymongo,Python,Mongodb,Pymongo,我有以下结构的mongoDB项目: { "some_field": { "date": 123, "text": "secondary text" }, "text": "primary text" } 我想在pymongo中编写查询,检查顶层的文本字段,并在第二层的“日期”字段应用条件查询。我得到了如下形式的过滤器: filter = { "text": "some target text", "date": {
{
"some_field": {
"date": 123,
"text": "secondary text"
},
"text": "primary text"
}
我想在pymongo中编写查询,检查顶层的文本字段,并在第二层的“日期”字段应用条件查询。我得到了如下形式的过滤器:
filter = {
"text": "some target text",
"date": {
"start": some_int_val1,
"end": some_int_val2
}
}
我可以毫无问题地创建对“文本”的查询:
query = dict()
query["text"] = filter["text"]
但是我对如何在“some_field.date”上构造$和查询感到困惑。我试图简单地将它们组合到一个查询中:
query["somefield.date"] = [{"$gte": filter["common_date"]["start"]}, {"$lte": filter["common_date"]["end"]}]
但它不起作用。此外,我尝试了我认为有效的方法,但它抛出了一个错误:
query["somefield.date"] = { $and: [{"$gte": filter["date"]["start"]}, {: filter["date"]["end"]}]}
说“预期语句,找到Py:和_关键字”。我怎样才能克服这个问题呢?这应该行得通
query["somefield.date"] = {"$gte": filter["date"]["start"],"$lte": filter["date"]["end"]}
您的最终查询应该如下所示:
{
'somefield.date': {'$gte': some_int_val1, '$lte': some_int_val2},
'text': 'some target text'}
}
在JavaScript中,您可以使用创建查询对象,如下所示:
var filter = {
"text": "some target text",
"date": {
"start": 100,
"end": 150
}
};
var query = { "some_field": { "date": {} } };
query["text"] = filter["text"];
query["some_field"]["date"]["$gte"] = filter["date"]["start"];
query["some_field"]["date"]["$lte"] = filter["date"]["end"];
console.log(JSON.stringify(query)); // {"some_field":{"date":{"$gte":100,"$lte":150}},"text":"some target text"}
使用python中的相同概念创建查询字典,如下所示:
>>> filter = {
... "text": "some target text",
... "date": {
... "start": 100,
... "end": 150
... }
... }
>>>
>>> print(filter)
{'date': {'start': 100, 'end': 150}, 'text': 'some target text'}
>>> query = { "some_field": { "date": {} } }
>>> query["text"] = filter["text"]
>>> query["some_field"]["date"]["$gte"] = filter["date"]["start"]
>>> query["some_field"]["date"]["$lte"] = filter["date"]["end"]
>>> print(query)
{'text': 'some target text', 'some_field': {'date': {'$lte': 150, '$gte': 100}}}
>>>
我很高兴能帮上忙。