我是mongodb和python的初学者,我正在尝试编写python代码,根据NumberLong类型的日期字段删除30天以上的多个集合的文档,并且还必须将集合导出到删除前的CSV。我使用下面的简单代码打印记录作为第一步使用新的Date()。它在Mongo Shell中工作但在python中声明语法错误。请帮助。
示例数据:
{ "_id" : ObjectId("589d6eb390cc70b775892ae1"), "trgtm" : NumberLong("1486280499661") }
{ "_id" : ObjectId("589d602d2fa2fa6687bc7293"), "trgtm" : NumberLong("1486276781059") }
{ "_id" : ObjectId("589d701f90cc70b775892ae2"), "trgtm" : NumberLong("1486194463192") }
{ "_id" : ObjectId("589d702390cc70b775892ae3"), "trgtm" : NumberLong("1486108067444") }
代码
import pymongo
from pymongo import MongoClient
conn=MongoClient('localhost',27017)
db=conn.mydb
col=db.test
query= { "date": { "$lt": new Date(new Date()).getTime() - 30 * 24 * 60 * 60 * 1000 } }
cursor=col.find(query)
slice=cursor[0:100]
for doc in slice:
print doc
答案 0 :(得分:0)
我在python中使用datetime作为日期..
这是一个例子:
import datetime
date = datetime.date(2017,2,10)
otherDate = datetime.date(1999,1,1)
date < otherDate # False
答案 1 :(得分:0)
您必须像这样使用 datetime.datetime:
query = {"date": {"$lt": datetime.datetime(2021, 6, 14, 0, 0, 0, 0)}}
要使用当前时间,您可以:
query = {"date": {"$lt": datetime.now(timezone.utc)}}
来源:https://pymongo.readthedocs.io/en/stable/examples/datetimes.html
答案 2 :(得分:0)
使用 bson.Int64() 查询 NumberLong 格式的时间戳。它对我有用。 在下面为您定制:
import bson
import pymongo
from pymongo import MongoClient
conn=MongoClient('localhost',27017)
db=conn.mydb
col=db.test
timestamp_value= <value> #calculate epoch time stamp 30 days earlier and variable should be of type String
query= { "date": { "$lt": bson.Int64(timestamp_value) } }
cursor=col.find(query)
slice=cursor[0:100]
for doc in slice:
print doc