mongodb findOneAndUpdate线程安全吗

时间:2018-07-17 11:46:15

标签: mongodb

mongodb findOneAndUpdate线程安全吗?

许多用户可以同时从一个集合中获得一条记录,然后立即设置user_id,因此其他用户无法再次获得相同的记录(就像消息队列一样,每个用户都会使用不同的数据)。见下文

db.foo.findOneAndUpdate({"user_id":{$exists:false}, {$set:{user_id:"123456"}},{sort:{_id:1}}})

我已经编写了一个python脚本来检查它是否线程安全,看来findOneAndUpdate是线程安全的。是吗?

def query_and_set_user_id(user_id):
    result = db.test.find_one_and_update({"user_id":{"$exists":False}},{'$set': {'user_id': user_id}}, sort=[("id", 1)])
    print(threading.current_thread(), result)
    return result

max_workers = 5
pool = ThreadPoolExecutor(max_workers)
futures = []
for i in range(max_workers):
    f = pool.submit(query_and_set_user_id, "user_{}".format(i+1))
    futures.append(f)

wait(futures)

0 个答案:

没有答案