我想查询MongoDB并返回日期为12/6/2017的记录。日期采用以下格式:
u'Date': datetime.datetime(2017, 12, 6, 15, 9, 21, 303000)
那么,我该如何查询该条目的年,月和日?我试过了:
date = db.data.find({ 'Date' : {'2017, 12, 6'} },{'Date' : '1'})
for document in date:
print(date)
返回:" InvalidDocument:无法编码对象:set([' 2017,12,6'])"。
我也尝试过:
date = db.data.find({ 'Date' : {datetime('2017, 12, 6')} },{'Date' : '1'})
for document in date:
print(date)
返回:" NameError:name' datetime'未定义"。
... UPDATE解 我错误地将日期输入Mongo。我现在用Python将日期放入Mongo:
import datetime
import dateutil.parser
# the date
now = datetime.datetime.now()
year = now.year
month = now.month
day = now.day
theDate = str(year) + "-" + str(month) + "-" + str(day)
dateStr = theDate
date = dateutil.parser.parse(dateStr)
# Then put that date into your Mongo insert
这就是我按日期查询的方式。这将拉动在yersterday(今天)之后插入的文档。
import dateutil.parser, datetime
now = datetime.datetime.now()
year = now.year
month = now.month
yesterday = now.day - 1
dateStr = str(year) + "-" + str(month) + "-" + str(yesterday)
date = dateutil.parser.parse(dateStr)
cursor = db.data.find({'Date' : { '$gt' : date}},{'Date':'1'})
for document in cursor:
print(document)
答案 0 :(得分:0)
当你说对象存储为datetime.datetime时,你指的是什么?自定义对象?
根据Mongo文档,这是他们支持明显的唯一日期对象: https://docs.mongodb.com/v3.4/reference/method/Date/
来自文档:
Date()以字符串或Date对象的形式返回日期。
Date()以mongo shell中的字符串形式返回当前日期。新 Date()以Date对象的形式返回当前日期。 mongo shell 使用ISODate帮助程序包装Date对象。 ISODate是UTC。 您可以通过传递给Date()方法a来指定特定日期 日期时间字符串。例如:
新日期("")返回指定的ISODate 日期。新日期(""),指定日期时间 在本地日期时间并返回具有指定日期时间的ISODate 在UTC中。新日期("")指定 以UTC为单位的datetime并返回具有指定日期时间的ISODate UTC。
要创建一个查询来搜索mongo中的Date字段,您可以实现这样的ISODate
db.collection.find({"datefield" : ISODate("YYYY-MM-DDTHH:MM:SS")})
通常情况下,使用时间有限,因为时间以毫秒为单位,因此您可能需要进行类似的范围查询:
db.collection.find({"datefield" : {"$gte" : <beginning_of_day_as_ISODate>, "$lte" : <end_of_day_as_ISODate>})
例如:
{createdDate : {$gte : ISODate("2017-12-06T00:00:00"), $lte : ISODate("2017-12-06T23:59:59")}}
如果 使用自定义日期对象,或以某种非标准格式存储日期,则需要根据该对象定制查询。
答案 1 :(得分:0)
你可以试试这样的东西
date = db.data.find({ 'Date' : {new ISODate("2017-12-6T23:59:59Z") } },{'Date' : '1'})
for document in date:
print(date)
或者你可以试试这个,
date = db.data.find({ 'Date' : {new Date(2017,12,6) } },{'Date' : '1'})
for document in date:
print(date)