我想将所有“组织”的“状态”字段转换为所有大写。所以
'Ky‘变成'KY’'tX‘变成'TX’'ca‘变成'CA’
为什么这不管用
db.organizations.update(state:{ $exists : true }},{$set:{state:{ $toUpper : state }}}, false, true)
发布于 2015-11-07 05:23:38
你必须把toUpperCase()写成这样:
"$set": { "state": doc.state.toUpperCase() } }发布于 2014-06-25 00:23:10
您引用的$toLower和$toUpper运算符仅用于聚合框架,其本身并不像.update()语句那样改变集合中的文档。此外,目前不可能在update语句中引用现有字段的值来生成新值。
您需要做的是“循环”集合并进行更改:
db.organizations.find({ "state": { "$exists": true } }).forEach(function(doc) {
db.organizations.update(
{ "_id": doc._id },
{ "$set": { "state": doc.state.toUpperCase() } }
);
});使用MongoDB 2.6或更高版本,可以使用大容量操作API使其更好:
var bulk = db.organizations.initializeOrderedBulkOp();
var count = 0;
db.organizations.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.organizations.initializeOrderedBulkOp();
count = 0;
}
});
if ( count > 0 )
bulk.execute();在基本上循环结果的同时,写入只会每500个文档发送一次,或者任何您选择的操作保持在16 to BSON限制内的任何文件。
https://stackoverflow.com/questions/24398045
复制相似问题