我正在使用结构脚本将数据从远程 mongodb 服务器转储到我的本地计算机,然后我希望从远程计算机中删除该数据。我现在分两步进行,虽然我可以理解可能还有更优雅的方法存在几天,但我想继续这样。这是我作为 fab 任务运行的 python 函数的片段
from __future__ import with_statement
from fabric.api import *
from fabric.contrib.console import confirm
import datetime
import dateutil.relativedelta
def dump_mydb():
print "********************************"
print "Starting the dump process"
print "********************************"
d = datetime.datetime.today()
d2 = d - dateutil.relativedelta.relativedelta(months=1)
end_date = datetime.datetime(d2.year, d2.month, d2.day)
print end_date
before_time = int(end_date.strftime("%s")) * 1000
temp = datetime.datetime.today()
temp2 = datetime.datetime(temp.year, temp.month, temp.day)
local_folder = str(temp2).split(" ")[0]
local("mongodump --host x.x.x.x --port 27017 --collection my_collection --db my_db -q '{fetched_date :{$lte: Date(" + str(before_time) + ")}}'")
local("mkdir ../dump_files/store/" + local_folder)
local("cp -r dump ../dump_files/store/" + local_folder)
local("rm -rf dump")
print "********************************"
print "Data before one month from today is dumped at - ../dump_files/store/" + local_folder
print "********************************"
如果此脚本在今天(2014 年 2 月 14 日,IST)执行,那么它会搜索所有“fetched_date”(具有日期和时间的普通 ISODate 对象)小于等于 2014-01-14 00:00 的文档:00。这个脚本执行得很好。
问题
执行此脚本时,我们可以看到它将 X 个对象(文档)转储到我的本地计算机中。但是当我们在远程 mongo shell 中运行这个查询时
{"fetched_date":{"$lte": ISODate("2014-01-14T00:00:00.00Z")}}
这给了我们不同数量的记录。这比 X 多。这意味着我们不能删除与该查询匹配的所有记录,因为其中一些记录没有被转储到我的本地计算机中。我不明白这怎么可能,因为我以毫秒为单位转换相同的日期,然后在 mongodump 运行查询。
有人可以帮帮我吗?
如果您需要更多信息,请告诉我。谢谢。