我有一个API,我从中接收查询。这个API是Python。
我从django app(views.py)中调用它。然后,我想使用mongoengine查询我的MongoDB集合:
api_response = requests.get("http://*******", {'query':query}) #We call the API
json_resp = api_response.json()
person = Person.objects(__raw__=json_resp).to_json() #We search for the json_query in the DB (raw) and the output is JSON
它工作正常,但我的日期有问题......的确,我的Person模型如下:
class Person(DynamicDocument):
# Meta Variables
meta = {
'collection':'personsExample'
}
#Document variables
PersonID = models.CharField(max_length = 6)
FirstName = models.CharField(max_length = 50)
LastName = models.CharField(max_length = 50)
Gender = models.CharField(max_length = 6) #male/female
BirthDate = models.DateField()
CitizenCountryCode = models.CharField(max_length = 2)
我的人员示例集合是通过mongoimport从CSV文件中导入的:
mongoimport --host localhost --db persons --collection personsExample --type csv --file reducedPersonsExtract.csv --headerline
由于出生日期设为字符串,我使用以下方法对其进行了转换:
db.personsExample.find().forEach(function(el){el.BirthDate = new ISODate(el.BirthDate); db.personsExample.save(el)})
我现在遇到的问题是它给出了BirthDate字段如下:
"BirthDate" : ISODate("1970-12-21T00:00:00Z")
但是在我的json查询中,date存储为
datetime.datetime(1970,12,21,0,0,0).isoformat()
给出了:
{
"BirthDate": "1970-12-21T00:00:00"
}
因此,查询无效,我需要使用
进行查询{
"BirthDate": ISODate"1970-12-21T00:00:00Z"
}
(但我不能用Python创建这样的对象(ISODate)...) 或者找到另一种在MongoDB中存储日期的方法。
您是否碰巧知道如何解决我的问题?
答案 0 :(得分:2)
我已经成功达到我想要的目标。实际上,我没有在DB中将日期转换为ISODate,我将它们存储为字符串“YYYY-MM-DD”。然后,我在我的API中格式化日期(将JSON查询发送到使用MongoDB的App):
my_dict['BirthDate'] = datetime.datetime(YYYY,MM,DD).isoformat()
然后,在我的应用程序中:
json_resp = api_response.json() #Deserialization of the response
json_resp['BirthDate'] = datetime.datetime.strptime(json_resp['BirthDate'], "%Y-%m-%dT%H:%M:%S")
它可能不是最好的解决方案,但它确实有效。