pymongo를 사용하여 mongodb에서 쿼리 날짜를 만드는 방법은 무엇입니까?
mongodb에서 쿼리 날짜를 수행하려고 하는데 결과가 항상 비어 있습니다.제 질문은 다음과 같습니다.
//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)
//변수 결과: Mongo 반환이 비어 있습니다.
Obs: .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 변수를 인쇄하면 다음과 같은 것이 보입니다.
{'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"
@조니가 맞아요, 당신은 사용해야 합니다.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'}
분명히 저는 성공적으로 결과를 반환할 수 있습니다.데이터가 손상되었거나 모든 코드를 게시하여 검토해야 합니다.
ISODate 특성에 대한 쿼리 조건은 Python을 사용해야 합니다.datetime.datetime
물건들.
즉, isoformat 함수를 사용하여 날짜를 문자열로 형식화하지 말고 그대로 사용합니다.
문제는 마지막에 있는 '04'입니다.
start = datetime(2014, 9, 24, 7, 51, 04)
"SyntaxError: 10진수 정수의 선행 0은 허용되지 않습니다. 8진수 정수에는 0o 접두사를 사용하십시오."
이렇게 쓰면 문제가 해결됩니다.
start = datetime.datetime(2014, 9, 24, 7, 51, 4).
한다면start = datetime(2014, 9, 24, 7, 51, 04)
던지기 오류입니다.
사용해 보십시오.
start = datetime.datetime(2014, 9, 24, 7, 51, 04)
.
언급URL : https://stackoverflow.com/questions/26366417/how-to-make-a-query-date-in-mongodb-using-pymongo
'programing' 카테고리의 다른 글
ISIN을 사용한 Bloomberg BDH 기능 (0) | 2023.07.09 |
---|---|
MongoDB 시간 없이 날짜만 비교 (0) | 2023.07.04 |
MongoDB Embedded Objects에 ID(null 값)가 없습니다. (0) | 2023.07.04 |
Pyodbc Connection 개체를 팬더와 함께 사용할 때 경고 표시 (0) | 2023.07.04 |
다양한 경우에 테이블 열을 기준으로 정렬하려면 어떻게 해야 합니까(Oracle) (0) | 2023.07.04 |