J'essaie d'effectuer une requête dans mongodb, mais le résultat est toujours vide . Ma requête est la suivante:
//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 return empty.
Obs: J'ai aussi essayé sans utiliser .isoformat () Lorsque je mets directement dans mongodb, ne renvoie les résultats que si j'ajoute ISODate . Donc, les résultats ne sont pas renvoyés:
db.inoshare.find( {'id_no': 1, 'datahora': {'$lte': '2014-09-24T07:52:04.945306', '$gte': '2014-09-24T07:51:04.958496'}, 'porta': 'A0'})
Plus encore si vous éditez les retours:
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'})
Ceci est une séquence d'enregistrements dans la base de données:
{ "_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 j'imprime la variable json de python, je vois quelque chose comme:
{'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'}
Ma connexion Mongndb Class est:
#!/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"
@Joni est correct, vous devez utiliser 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'}
clairement, je peux renvoyer les résultats avec succès ..__ Peut-être que vos données sont corrompues ou vous devez poster tout votre code pour que nous puissions les passer en revue
Les conditions de requête sur les attributs ISODate doivent utiliser les objets datetime.datetime
de Python.
Autrement dit, ne formatez pas vos dates sous forme de chaînes à l'aide de la fonction isoformat, utilisez-les telles quelles.