gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:27:20 26 4
gpt4 key购买 nike

我想将所有“组织”的“状态”字段转换为全部大写。所以

'Ky' 变成 'KY''TX' 变成 'TX''ca' 变成 'CA'

为什么这行不通

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

最佳答案

$toLower$toUpper您引用的运算符用于 aggregation framework仅,并且其本身不会像 .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 个文档或您选择设置的任何内容仅将写入发送到数据库一次,以保持操作的 16MB BSON 限制。

关于mongodb - 使用 $toLower 或 $toUpper 更新 MongoDB 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24398045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com