Как запустить mongodb-запросы в python - PullRequest
0 голосов
/ 12 сентября 2018

Я использую приведенный ниже запрос для получения данных из collection в mongodb

db.testcoll.aggregate([​
  { $unwind :'$data'},​
  { $match : {'type': 'data1', "my_id" : "44ef", 'data.time': { $gte : "2018-07-07 00:00:30" , $lte : "2018-07-08 00:57:30"} }},​
  { $project : { _id:0, my_id: '$my_id', time : '$data.time', value : '$data.value'} }​
])

. При выполнении вышеуказанного запроса в MongoDb я получаю соответствующие результаты.Сейчас я пишу небольшой python скрипт, в котором мне нужно выполнить тот же запрос.

query = ([​
  { '$unwind' :'$data'},​
  { '$match' : {'type': 'data1', "my_id" : "44ef", 'data.time': { '$gte' : "2018-07-07 00:00:30" , '$lte' : "2018-07-08 00:57:30"} }},​
  { '$project' : { '_id':0, 'my_id': '$my_id', 'time' : '$data.time', 'value' : '$data.value'} }​
])

document = testcoll.find(query)
for i in document:
    print(i)

Он показывает значения документа как None в отладчике и, таким образом, выдает ошибку:

TypeError: 'NoneType' object is not iterable

Как мне выполнить запрос в python.Спасибо

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Как указано в документации , вам необходимо использовать функцию aggregate.

query = ([​
  { '$unwind' :'$data'},​
  { '$match' : {'type': 'data1', "my_id" : "44ef", 'data.time': { '$gte' : "2018-07-07 00:00:30" , '$lte' : "2018-07-08 00:57:30"} }},​
  { '$project' : { '_id':0, 'my_id': '$my_id', 'time' : '$data.time', 'value' : '$data.value'} }​
])

document = testcoll.aggregate(query)
for i in document:
    print(i)

Кроме того, кажется, вы новичок в пимонго, но есть что посмотреть. PyMongo великолепен, но каждое взаимодействие с ним блокирует. Подумайте об использовании Motor , он допускает асинхронное / ожидание ( или даже Flask, если вы используете ) Почти все те же функции работают с ним, но они не блокируют.

С мотором это просто станет:

document = await testcoll.aggregate(query)
0 голосов
/ 12 сентября 2018

Вы можете использовать тот же запрос Монго в Python для запуска

query = [
  { '$unwind' :'$data'},​
  { '$match' : {'type': 'data1', "my_id" : "44ef", 'data.time': { '$gte' : "2018-07-07 00:00:30" , '$lte' : "2018-07-08 00:57:30"} }},​
  { '$project' : { '_id':0, 'my_id': '$my_id', 'time' : '$data.time', 'value' : '$data.value'} }​
]
document = testcoll.aggregate(query)
for i in document:
    print(i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...