我在我的python代码中使用远程mongodb数据库。访问数据库的代码和数据库本身在两台不同的机器上。我使用的pymongo模块版本是1.9+。 该脚本包含以下代码:
for s in coll.find({ "somefield.a_date" : { "$exists":False },
"somefield.b_date" : { "$exists":False }}):
original = s['details']['c_date']
utc = from_tz.localize(original).astimezone(pytz.utc)
s['details']['c_date'] = utc
if str(type(s['somefield'])) != "<type 'dict'>":
s['somefield'] = {}
s['somefield']['b_date'] = datetime.utcnow()
coll.update({ '_id' : s['_id'] }, s );
运行此代码后,发生了一件奇怪的事情。最初在集合中有数百万条记录,在运行脚本后,只有29%的记录保留,其余记录自动删除。 PyMongo驱动程序版本1.9+有任何已知问题吗? 可能是其他原因以及我能找出究竟发生了什么的方法?
答案 0 :(得分:0)
这可能是其他原因以及我能找出究竟发生了什么的方法吗?
要检查的第一件事是“有没有例外”?
在coll.update()
中,您没有设置safe
变量。如果update
上有异常,则不会抛出异常。
在您的代码中,您不会捕获异常(建议使用),并且您的更新不会检查异常,因此您无法知道发生了什么。
要检查的第二件事是“你怎么算”?
update
命令可以“清空”数据,但无法删除数据(或更改_id
)。
您是否有原始数据的副本?你可以在少数10或100上运行你的代码,看看发生了什么吗?
您所描述的内容对于任何MongoDB驱动程序都不正常。我们肯定需要更多数据来解决这个问题。