mongodb - 使用更新查询将文档值从字符串更改为 ObjectId

标签 mongodb mongodb-query

我需要将 mongodb 集合中所有文档的 Profession_id 的值从 string 更新为 ObjectId

我的收藏职业是(这里我只粘贴了 2 个文档,实际上我有超过 1 万个文档)

{
    "_id" : ObjectId("575845a713d284da0ac2ee81"),
    "Profession_id" : "575841b313d284da0ac2ee7d",
    "Prof_Name" : "Chief Officer"
}

{
    "_id" : ObjectId("575845d213d284da0ac2ee82"),
    "Profession_id" : "575841b313d284da0ac2ee7d",
    "Prof_Name" : "Executive Officer"
}

请帮助我如何更新 MongoDB 中的值。

最佳答案

我们需要遍历 snapshot()我们的文档并使用 $set 更新每个文档更新运算符。为此,我们使用批量操作来实现最高效率。

从 MongoDB 3.2 开始,我们需要使用 bulkWrite()方法

var requests = [];    
let cursor = db.collection.find({}, { "Profession_id": 1 }).snapshot();
cursor.forEach( document => { 
    requests.push( { 
        "updateOne": {
            "filter": { "_id": document._id },
            "update": { "$set": { "Profession_id": ObjectId(document.Profession_id) } }
        }
    });
    if (requests.length === 1000) {
        // Execute per 1000 operations and re-init
        db.collection.bulkWrite(requests);
        requests = [];
    }
});

// Clean up queues
if (requests.length > 0)
    db.collection.bulkWrite(requests);     

从 MongoDB 2.6 到 3.0,您需要使用现已弃用的 Bulk API 及其关联 method .

var bulk = db.collection.initializeUnorderedBulkOp();
var count = 0;

var cursor = db.collection.find({}, { "Profession_id": 1 }).snapshot()

cursor.forEach(function(document) { 
    bulk.find( { "_id": document._id } ).updateOne( {
        "$set: { "Profession_id": ObjectId(document.Profession_id) }
    } );
    count++;
    if (count % 1000 === 0) {
        // Execute per 1000 operations and re-init
        bulk.execute();
        bulk = db.collection.initializeUnorderedBulkOp();
    }
});

// Clean up queues
if (count > 0)
    bulk.execute();

关于mongodb - 使用更新查询将文档值从字符串更改为 ObjectId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37718005/

相关文章:

mongodb - 是否有用于基于字段过滤所有嵌套/子文档的 Mongo 函数?

c# - MongoDb 3.4 C# 驱动程序 - 如何使用 C# 驱动程序创建等效聚合查询

mongodb - 仅使用 find 方法查询 MongoDB 中的对象数组

mongodb - 如何在整个集合中进行仅求和查询?

node.js - mongoose — 检查 ObjectId 是否存在于数组中

sorting - 自定义排序顺序 - mongoDB 中的配置

MongoDB 聚合或获取集合中记录文档的 Mean 每日平均计数

node.js - Mongoose :在 find() 之后填充

java - mongodb 与 java 中的 where 子句不同

mongodb - 选择字段值在某个数组中的子文档