gpt4 book ai didi

mongodb - 通过 MongoDB 中的 collection.update 将所有数组值更新为 toUpper

转载 作者:行者123 更新时间:2023-12-04 10:06:14 25 4
gpt4 key购买 nike

Mongo shell> db.version : 4.2.6

尝试使用以下命令更新集合中的所有文档:
类别数组 []。 ["value1", "value2"]进入 ["VALUE1", "VALUE2"]通过使用占位符 $[e]
可以使用一些关于如何在下面重写或解释的帮助。
谢谢。

db.Article.update( {},{ $set :{ "categories.$[e]" : { $toUpper: "e"  }}},{ multi: true, arrayFilters : [ {"e" : { $regex:'.+'  } } ]} )

WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 52,
"errmsg" : "The dollar ($) prefixed field '$toUpper' in 'categories.0.$toUpper' is not valid for storage."
}
})

最佳答案

开始 MongoDB 版本 >= 4.2 MongoDB中的更新操作可以在其中执行聚合管道,检查:update-with-an-aggregation-pipeline .因此,您可以尝试以下查询:

db.Article.update(
{ $expr: { $eq: [{ $type: "$categories" }, "array"] } }, // Condition that checks `categories` exists & is an array.
[
{
$set: {
categories: {
$map: {
input: "$categories",
in: { $toUpper: "$$this" }
}
}
}
}
],
{ multi: true }
);

以防万一你的几个元素在 categories数组不是 类型字符串 (如果 categories 数组是数字和字符串的混合)然后在 in $map 的一部分你可以有这样的条件:: {$cond : [{$eq : [{$type : '$$this'},'string']},{ $toUpper: "$$this" } ,'$$this']}
测试:在此处测试聚合管道: mongoplayground

注:您可以使用 .updateMany()而不是使用 .update()带选项 {multi : true} .

关于mongodb - 通过 MongoDB 中的 collection.update 将所有数组值更新为 toUpper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61577251/

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