Estoy tratando de realizar una consulta fecha en mongodb, pero el resultado es siempre vacío.
Mi consulta es la siguiente:

//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) 

//variable resultaMongo retorno vacío.

Obs: yo también lo intentó sin usar .isoformat()
Cuando me pongo en mongodb directamente, sólo devolverá resultados si puedo añadir ISODate.
Así que no devuelve resultados:

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

Más así que si usted edición devuelve:

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'})

Esta es una secuencia de registros en la base de datos:

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

si imprimo la variable json de python, veo algo como:

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

Mi Mongndb Clase de conexión es:

#!/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"
OK, mucha claridad este tiempo. primero, usted no tendrá que repetir results=results, simplificar el código y simplemente prueba con test = conexaoMongo();results = test.queryMongo({..., {'$gte':datetime(...), '$lt':datetime(...)}})
prueba de esto ahora, pero no funcionó.
y su json diccionario está equivocado, usted no puede tener acceso a self fuera __init__, usted puede poner self.json = {...} y pasar self.json como parámetros.
Me imprime el contenido de la variable json está en el post.
Sólo puedo ayudar en este momento. con nuestras respuestas (y código), espero que usted puede corregir los errores en el código. Es bastante obvio que los parámetros no se pasa correctamente. Con algunos cambios que usted debería ser capaz de obtener el results que te he mostrado. Buena suerte!

OriginalEl autor touchmx | 2014-10-14

2 Comentarios

  1. 26

    @Joni es correcta, usted necesita usar 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'}

    claramente me puede devolver correctamente los resultados.
    Tal vez sus datos está dañado, o usted debe publicar todo el código para que podamos revisar

    Un ejemplo de inicio: datetime(2014, 9, 24, 8, 32, 37, 745578); Un examplor para el final: datetime(2014, 9, 24, 8, 33, 37, 731647); No hay resultados.
    ah veo, se almacena la fecha con ISODate
    necesitamos una conversión entre aquellos, ya que normalmente en mongo date es la tienda como Date objeto
    he editado para convertir datetime a isoformat, se puede probar y ver si funciona?
    Mira en mi post,yo ya había hecho eso. No hay resultados..

    OriginalEl autor Anzel

  2. 1

    Condiciones de la consulta en ISODate atributos deben usar Python datetime.datetime objetos.

    Que es, no el formato de las fechas como las cadenas de caracteres usando el isoformat de la función, el uso de ellos como son.

    También he intentado usar datetime.datetime, pero no pasó nada.
    No conseguir ningún resultado significa que no hay ningún documento coincide con todas las condiciones.
    Sería una correcta del pensamiento, pero mira, te voy a agregar en el post una lista de registros.

    OriginalEl autor Joni

Dejar respuesta

Please enter your comment!
Please enter your name here