2014-10-14 2 views
3

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

//in the begin code 
def __init__(self): 
    self.now = datetime.now() 
    self.db = conexaoMongo() 
    self.horaInicio = self.now - timedelta(minutes=1) 

def resultadoConsulta(self, modo, porta, id_node): 
    #print "Porta e No ", porta, id_node 
    resultadoMongo = [] 
    mediaFinal = False  
    try: 

     json = {'id_no': int(id_node), 'datahora': {'$gte': self.horaInicio, '$lt': self.now}, 'porta': porta} 

     print "COnsulta a ser realizada: ", json 
     resultadoMongo = self.db.queryMongoOne(json) 

// переменная resultaMongo возвращаются пустыми.

Обс: Я также пробовал без использования .isoformat() Когда я вставляю mongodb напрямую, возвращаю результаты только в том случае, если я добавляю ISODate. Так не возвращающие результаты:

db.inoshare.find({'id_no': 1, 'datahora': {'$lte': '2014-09-24T07:52:04.945306', '$gte': '2014-09-24T07:51:04.958496'}, 'porta': 'A0'}) 

Более того, если вы редактируете возвращения:

db.inoshare.find({'id_no': 1, 'datahora': {'$lte': ISODate('2014-09-24T07:52:04.945306'), '$gte': ISODate('2014-09-24T07:51:04.958496')}, 'porta': 'A0'}) 

Это последовательность записей в базе данных:

{ "_id" : ObjectId("5435be9ce7b9916e02ed2cb5"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:05Z"), "valor" : "917", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9ce7b9916e02ed2cb9"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:07Z"), "valor" : "932", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9ce7b9916e02ed2cbd"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:09Z"), "valor" : "189", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9ce7b9916e02ed2cc1"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:11Z"), "valor" : "853", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9ce7b9916e02ed2cc5"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:13Z"), "valor" : "202", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9ce7b9916e02ed2cc9"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:15Z"), "valor" : "398", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9ce7b9916e02ed2ccd"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:17Z"), "valor" : "947", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9ce7b9916e02ed2cd1"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:19Z"), "valor" : "57", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9ce7b9916e02ed2cd5"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:21Z"), "valor" : "395", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9ce7b9916e02ed2cd9"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:23Z"), "valor" : "941", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9ce7b9916e02ed2cdd"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:25Z"), "valor" : "208", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9ce7b9916e02ed2ce1"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:27Z"), "valor" : "186", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9ce7b9916e02ed2ce5"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:29Z"), "valor" : "848", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9ce7b9916e02ed2ce9"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:31Z"), "valor" : "571", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9ce7b9916e02ed2ced"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:33Z"), "valor" : "351", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9de7b9916e02ed2cf1"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:35Z"), "valor" : "558", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9de7b9916e02ed2cf5"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:37Z"), "valor" : "449", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9de7b9916e02ed2cf9"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:39Z"), "valor" : "768", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9de7b9916e02ed2cfd"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:41Z"), "valor" : "542", "sensor" : "1" } 
    { "_id" : ObjectId("5435be9de7b9916e02ed2d01"), "lab" : "2", "porta" : "A0", "id_no" : 1, "datahora" : ISODate("2014-09-24T07:51:43Z"), "valor" : "763", "sensor" : "1" } 

если я распечатать JSON переменная python, я вижу что-то вроде:

{'id_no': 1, 'datahora': {'$gte': datetime.datetime(2014, 9, 24, 8, 21, 38, 527653), '$lt': datetime.datetime(2014, 9, 24, 8, 22, 36, 677022)}, 'porta': 'A1'} 
соединение

Мой Mongndb Класс:

#!/usr/bin/python 
from pymongo import MongoClient 

class conexaoMongo: 

    def __init__(self): 
     self.conditions = []   
     self.client = MongoClient("127.0.0.1", 27017, safe=True) 
     self.db = self.client['inoshare'] 
     self.ino = self.db.inoshare  


    def queryMongo(self, param1, param2=None, param3=None): 

     try: 
      if param2 != None: 
       results = self.ino.find(param1, param2) 
      elif param3 != None: 
       results = self.ino.find(param1, param2, param3) 
      else:    
       results = self.ino.find(param1) 

      #print "Total de registros ", results.count() 

      for post in results: 
       #print post 
       self.conditions.append(post) 

      return self.conditions 

     except: 
      print "Erro ao executar a query" 
+0

Хорошо, на этот раз ясно. во-первых, вам не нужно повторять «результаты = результаты», упорядочить код и просто проверить с помощью 'test = conexaoMongo(); results = test.queryMongo ({..., {'$ gte': datetime (. ..), '$ lt': datetime (...)}}) ' – Anzel

+0

проверил это сейчас, но это не сработало. – touchmx

+0

и ваш словарь 'json' не прав, вы не можете получить доступ к' self' вне '__init__', вы можете либо поместить' self.json = {...} ', и передать' self.json' в качестве параметров. – Anzel

ответ

19

@Joni является правильным, вам необходимо использовать datetime.

from datetime import datetime 
from pymongo import Connection 

# i have updated and included the complete code 
client = Connection('localhost', 27017) 
db = client['database'] # your database name 
inoshare = db['inoshare'] 


# convert your date string to datetime object 
start = datetime(2014, 9, 24, 7, 51, 04) 
end = datetime(2014, 9, 24, 7, 52, 04) 

inoshare.find({'id_no': 1, 'datahora': {'$lt': end, '$gte': start}, 'porta': 'A0'}) 
<pymongo.cursor.Cursor at 0x7f9aafd64a90> 

inoshare.find_one({'id_no': 1, 'datahora': {'$lt': end, '$gte': start}, 'porta': 'A0'}) 

{u'_id': ObjectId('5435be9ce7b9916e02ed2cb5'), 
u'datahora': datetime.datetime(2014, 9, 24, 7, 51, 5), 
u'id_no': 1.0, 
u'lab': u'2', 
u'porta': u'A0', 
u'sensor': u'1', 
u'valor': u'917'} 

ясно я могу успешно вернуть результаты. Возможно, ваши данные повреждены, или вы должны опубликовать весь свой код для ознакомления.

+0

Пример для запуска: дата и время (2014, 9, 24, 8, 32, 37, 745578); Экзамен на конец: дата и время (2014, 9, 24, 8, 33, 37, 731647); Нет результатов. – touchmx

+0

ah Я вижу, вы храните дату с 'ISODate' – Anzel

+0

вам нужно преобразование между ними, так как обычно на mongo' date' хранится как объект 'Date' – Anzel

1

условия запроса на ISODate атрибуты должны использовать datetime.datetime объекты Python.

То есть, не форматируйте свои даты как строки с помощью функции isoformat, используйте их так, как они есть.

+0

Я также пробовал использовать datetime.datetime, но ничего не пришло. – touchmx

+0

Отсутствие каких-либо результатов означает, что ни один документ не соответствует всем условиям. – Joni

+0

Было бы правильно подумать, но посмотрите, я добавлю в сообщение список записей. – touchmx

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