Robo3T bulkWrite失败,没有错误对象

时间:2018-04-24 09:46:18

标签: mongodb robo3t

我试图在mongo db shell上进行批量写操作。我试图将每个文档的两个属性合并为一个新属性(sender.street + sender.houseNumber = sender.addressLine1)

因为即使在我们的登台服务器上也有超过7000个文件需要更新,所以我认为使用批量操作是一个好主意。到目前为止,这是我的剧本:

// select street + housenumber into new temporary collection
var senderLine1 = db.getCollection('mailItem').aggregate([
    { $project: { addressLine1: { $concat: [ "$sender.street", " ", "$sender.houseNumber"] } } }
]);

var bulkOps = [];
// collect all operations into array
senderLine1.forEach(
    function(line1) {
        bulkOps.push({ 
            updateOne: { 
                  "filter" : { "_id" : line1._id },
                  "update" : { $set : { "sender.addressLine1" : line1.addressLine1 } }
                } 
        });
    }
);
try {
    db.mailItem.bulkWrite(bulkOps, { ordered : false });
} catch (e) {
    print(e);
}

现在我希望看到一个BulkWriteError对象,但我在Robo3T结果视图中得到的只是Error: error doing query: failed

选择似乎进展顺利,我可以看到结果。我也可以打印数组,生成的操作看起来很好。例如:

{
    "updateOne" : {
        "filter" : {
            "_id" : "bc3f65bd-5c32-4577-a57a-1c7665e1984b"
        },
        "update" : {
            "$set" : {
                "sender.addressLine1" : "someStreet 123"
            }
        }
    }
}

如果我执行它正常工作的那个:

db.mailItem.bulkWrite(
[
    { "updateOne" : 
        {
            "filter" : {"_id" : "bc3f65bd-5c32-4577-a57a-1c7665e1984b" },
            "update" : { "$set" : { "sender.addressLine1" : "someStreet 123" } }
        }
    }
])

只是批量没有执行。我真的不知道为什么会这样,因为我没有收到任何错误。

修改

对于减少数量的文件(如100),这运行得很好。它开始在500左右失败,所以看起来根本问题围绕着超时或其他有限的资源。

然而,获得一个我可以使用而不是Error: error doing query: failed的ErrorOjbect也会很好。这可能是Robo3T的一个问题吗?

0 个答案:

没有答案