[英]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.