Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pymongo中的多查询_Python_Mongodb_Pymongo - Fatal编程技术网

Python pymongo中的多查询

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": {

我有以下结构的mongoDB项目:

{
    "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}}}
>>>

我很高兴能帮上忙。