簡體   English   中英

使用$ toLower或$ toUpper更新MongoDB集合

[英]Update MongoDB collection with $toLower or $toUpper

我想將所有'組織'的'州'字段轉換為所有UPPER案例。 所以

'Ky'成為'KY''tX'成為'TX''ca'成為'CA'

為什么這不起作用

db.organizations.update(state:{ $exists : true }},{$set:{state:{ $toUpper : state }}}, false, true)

您引用的$toLower$toUpper運算符僅用於聚合框架 ,並且它本身不會像.update()語句那樣更改集合中的文檔。 此外,目前無法在update語句中引用現有字段的值來生成新值。

你需要做的是“循環”集合並進行更改:

db.orginizations.find({ "state": { "$exists": true } }).forEach(function(doc) {
    db.orginizations.update(
        { "_id": doc._id },
        { "$set": { "state": doc.state.toUpper() } }
    );
});

使用MongoDB 2.6或更高版本,您可以使用批量操作API使其更好一些:

var bulk = db.orginizations.initializeOrderedBulkOp();
var count = 0;

db.orginizations.find({ "state": { "$exists": true } }).forEach(function(doc) {
    bulk.find({ "_id": doc._id }).updateOne({
        "$set": { "state": doc.state.toUpperCase() } }
    );
    count++;
    if ( count % 500 == 0 ) {
        bulk.execute();
        bulk = db.orginizations.initializeOrderedBulkOp();
        count = 0;
    }
});

if ( count > 0 )
    bulk.execute();

雖然仍然基本上循環結果,但是每500個文檔或者您選擇設置的任何內容都只會將寫入發送到數據庫,並保持在16MB BSON限制范圍內。

你必須像這樣把toUpperCase()

"$set": { "state": doc.state.toUpperCase() } }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM