MongoDB使用相同的文档更新整个集合

2024-09-26 22:55:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我的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而不是replace,但是输出是相同的。感谢您的每一个建议

另一方面,如果我尝试使用insert_one插入值,则输出将是预期的,因此每个字段将具有不同的随机值


Tags: 代码文档numberfordbvaluemongodbfind
1条回答
网友
1楼 · 发布于 2024-09-26 22:55:29

以下代码可以实现此目的:

//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 }

相关问题 更多 >

    热门问题