通过pymongo更新MongoDB记录导致大部分被删除
我正在用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以上的版本有没有已知的问题?还有可能是什么其他原因导致的?我有什么办法可以查明到底发生了什么吗?
1 个回答
0
这可能还有其他原因吗?我有什么方法可以找出到底发生了什么?
首先要检查的是 “有没有出现异常?”
在 coll.update()
这个操作中,你没有设置 safe
这个变量。如果在 update
过程中出现了异常,它不会被抛出来。
在你的代码里,你没有捕捉异常(这是建议的做法),而且你的更新操作也没有检查异常,所以你根本不知道发生了什么。
第二个要检查的是 “你是怎么计数的?”
update
命令可以“清空”数据,但它不能删除数据(或者更改 _id
)。
你有原始数据的备份吗?能不能在这10个或100个数据中选几个小的来运行你的代码,看看发生了什么?
你描述的情况在任何MongoDB驱动中都不正常。我们确实需要更多的信息来解决这个问题。