MongoDB使用Python查询DateTime

时间:2017-12-06 19:41:03

标签: python mongodb pymongo

我想查询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)

2 个答案:

答案 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)