Python MongoDB使用相同的文档更新整个集合
我的MongoDB收藏中有一些文档,它们看起来像这样:Python MongoDB使用相同的文档更新整个集合,python,mongodb,Python,Mongodb,我的MongoDB收藏中有一些文档,它们看起来像这样: number: first value: 1 number: two value: 2 number: three value: 3 number: first value: 4747 number: two value: 1024 number: three value: 102 number: first value: 1024 number: two value: 1024 number: three value: 1
number: first
value: 1
number: two
value: 2
number: three
value: 3
number: first
value: 4747
number: two
value: 1024
number: three
value: 102
number: first
value: 1024
number: two
value: 1024
number: three
value: 1024
我想更新集合中的所有文档,以便将每个文档的值
字段更改为随机数,如下所示:
number: first
value: 1
number: two
value: 2
number: three
value: 3
number: first
value: 4747
number: two
value: 1024
number: three
value: 102
number: first
value: 1024
number: two
value: 1024
number: three
value: 1024
我尝试了以下代码:
cursor = db.mycol.find()
for record in cursor:
record = db.mycol.raplace_many({}, {"value": random.randrange(10000)})
问题在于,它不是用新的随机值更新每个文档,而是用相同的随机值更新所有文档,如下所示:
number: first
value: 1
number: two
value: 2
number: three
value: 3
number: first
value: 4747
number: two
value: 1024
number: three
value: 102
number: first
value: 1024
number: two
value: 1024
number: three
value: 1024
为什么会这样?我尝试了同样的方法,但是使用了update\u many
而不是replace,但是输出是相同的。感谢您的每一个建议
另一方面,如果我尝试使用
insert\u one
插入值,则输出将是预期的,因此每个字段将具有不同的随机值。以下代码可以完成此操作:
//Fetching the array of object IDs from the collection.
var objectIDs= db.collection.distinct("_id");
// Iterating over the array and updating the 'value' correspond to each object ID with a random value. Since there is a default index on object ID, the operation would be fast.
objectIDs.forEach(id=>{
db.collection.update(
{
"_id":id
},
{
$set:{
"value": Math.floor(Math.random() * 10000)
}
}
)
});
更新前:
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab4"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab5"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab6"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab7"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab8"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab9"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3aba"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3abb"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3abc"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3abd"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab4"), "value" : 3538 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab5"), "value" : 9678 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab6"), "value" : 8325 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab7"), "value" : 2986 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab8"), "value" : 6159 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab9"), "value" : 4564 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3aba"), "value" : 7185 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3abb"), "value" : 2585 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3abc"), "value" : 7073 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3abd"), "value" : 4094 }
更新后:
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab4"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab5"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab6"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab7"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab8"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab9"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3aba"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3abb"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3abc"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3abd"), "value" : 1 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab4"), "value" : 3538 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab5"), "value" : 9678 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab6"), "value" : 8325 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab7"), "value" : 2986 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab8"), "value" : 6159 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3ab9"), "value" : 4564 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3aba"), "value" : 7185 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3abb"), "value" : 2585 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3abc"), "value" : 7073 }
{ "_id" : ObjectId("5d8774e19f062d4c422b3abd"), "value" : 4094 }
发生这种情况的原因:因为您在Python中只生成一个随机值,并将其传递给MongoAPI。你需要在Mongo中生成值,如果有的话。好的!但是,当我使用insert而不是update时,为什么它会起作用呢?如果您使用
insert\u one
?好吧,那就插入一份文件。如果在循环中这样做,并且每次都生成另一个随机值,那么就会得到许多具有不同值的文档。这不是我已经在做的吗?我的意思是,对于每个记录,它应该生成一个随机数x=randrange(10000)
print(x)
替换许多(…,{'value':x})
——这就是您正在做的。只有一个x
。它的值不变。