2014-10-14 3 views
3

Необходимо выполнить запрос в базе данных mongodb, в результате чего будет получен набор результатов по временному диапазону. Я использую пимонго. Мой запрос выглядит следующим образом:Запрос по временному диапазону в mongodb с использованием pymongo

query = {"$and": [ 
        {"id_node": id_node} 
        {"port": port}, 
        {"datetime": {"$gte": self.hourBegin}} 
        {"datetime": {"$lte": self.now}} 
        ]} 
listResults = db.mycollection.find (query) 

Я также попробовал этот путь:

query = {"id_node": int(id_node) 
        "port": port, 
        "datetime": {"$gte": self.hourBegin, "$lte": self.now}} 
listResults = db.mycollection.find (query) 

Но результат всегда пустой. Протестировано непосредственно в mongodb, но результат пуст. Я уверен, что данные существуют в базе данных с диапазоном времени, который я исследую.

список возможных результатов:

{ "_id" : ObjectId("543618c6e7b9914c35266128"), "lab" : "2", "port" : "A1", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:04Z"), "valor" : "22.00", "sensor" : "2" } 
{ "_id" : ObjectId("543618c6e7b9914c35266129"), "lab" : "2", "port" : "A0", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:04Z"), "valor" : "0", "sensor" : "1" } 
{ "_id" : ObjectId("543618c6e7b9914c3526612c"), "lab" : "2", "port" : "A1", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:06Z"), "valor" : "22.00", "sensor" : "2" } 
{ "_id" : ObjectId("543618c6e7b9914c3526612d"), "lab" : "2", "port" : "A0", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:06Z"), "valor" : "0", "sensor" : "1" } 
{ "_id" : ObjectId("543618c7e7b9914c35266130"), "lab" : "2", "port" : "A1", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:08Z"), "valor" : "22.00", "sensor" : "2" } 
{ "_id" : ObjectId("543618c7e7b9914c35266131"), "lab" : "2", "port" : "A0", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:08Z"), "valor" : "0", "sensor" : "1" } 
{ "_id" : ObjectId("543618c7e7b9914c35266134"), "lab" : "2", "port" : "A1", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:10Z"), "valor" : "22.00", "sensor" : "2" } 
{ "_id" : ObjectId("543618c7e7b9914c35266135"), "lab" : "2", "port" : "A0", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:10Z"), "valor" : "0", "sensor" : "1" } 
{ "_id" : ObjectId("543618c7e7b9914c35266138"), "lab" : "2", "port" : "A1", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:12Z"), "valor" : "22.00", "sensor" : "2" } 
{ "_id" : ObjectId("543618c7e7b9914c35266139"), "lab" : "2", "port" : "A0", "id_node" : 1, "datetime" : ISODate("2014-09-26T18:28:12Z"), "valor" : "0", "sensor" : "1" } 
+0

удалите пробел в операторе запроса. Используйте '$ gte' вместо' $ gte'. То же самое для '$ lte'. –

+0

также использует второй вариант запроса, но ваш объект запроса недействителен. В поле 'id_no' отсутствует': '. –

+0

Можете ли вы обновить свой вопрос, включив образец документа, который вы ожидаете включить в результаты? – JohnnyHK

ответ

4

посещаю http://www.querymongo.com/, а затем создал запрос, как если бы это было в MySQL, то должны были вернуть один MongoDB запрос. как это:

#MySQL Query 
SELECT * FROM inoshare WHERE id_nome = 1 AND port = 1 AND datetime > 'hourBegin' AND datetime <= 'NOW()'; 

и возвращение:

db.inoshare.find({ 
"id_nome": 1, 
"port": 1, 
"datetime": { 
    "$gt": "hourBegin", 
    "$lte": "NOW()" 
} 
}); 

Затем замените 'hourBegin' и 'NOW()' для переменных. Спасибо за всех.

Смежные вопросы