【发布时间】:2019-09-22 21:40:02
【问题描述】:
我的 MongoDB 集合中有一些文档,它们看起来像这样:
number: first
value: 1
number: two
value: 2
number: three
value: 3
我想更新集合中的所有文档,让每个文档的value字段变成一个随机数,像这样:
number: first
value: 4747
number: two
value: 1024
number: three
value: 102
我尝试了以下代码:
cursor = db.mycol.find()
for record in cursor:
record = db.mycol.raplace_many({}, {"value": random.randrange(10000)})
问题在于,它不是用新的随机值更新每个文档,而是用相同的随机值更新所有文档,如下所示:
number: first
value: 1024
number: two
value: 1024
number: three
value: 1024
为什么会这样?我尝试了同样的事情,但使用update_many 而不是替换,但输出是相同的。非常感谢每一个建议!
另一方面,如果我尝试使用 insert_one 插入值,则输出将是预期的,因此每个字段将具有不同的随机值。
【问题讨论】:
-
为什么会发生这种情况:因为您只在 Python 中生成一个随机值,然后将其传递给 Mongo API。如果有的话,您需要在 Mongo 中生成值。
-
好的!但是,为什么当我使用插入而不是更新时它会起作用?
-
如果你这样做
insert_one?好吧,插入 one 文档。如果您在循环中执行此操作并且每次都生成另一个随机值,那么您会得到许多具有不同值的文档。 -
这不是我已经在做的吗?我的意思是,对于每条记录,它应该生成一个随机数
-
x = randrange(10000)print(x)replace_many(..., {'value': x})– 这就是你正在做的事情。只有一个x。它的值不会改变。