Ali*_*ena 5 concatenation mongodb
我正在尝试通过将 MongoDB 集合中的字段与文字字符串连接来更新该字段的值。除此之外,该字段是一个整数,我想在前面加一个“0”,所以它会变成一个字符串。
我读过我不能在单个更新指令中使用字段的旧值,所以我使用了forEach()方法。
这是代码:
db.col_1.find({"field_1": {$lt: 10000}}).forEach( function(i){
db.col_1.update({_id: i._id},
{$set: { "field_1": {$concat: ["0", i.field_1]}}}
)
});
Run Code Online (Sandbox Code Playgroud)
返回结果是:
The dollar ($) prefixed field '$concat' in 'field_1.$concat' is not valid for storage.
Run Code Online (Sandbox Code Playgroud)
我确定我没有正确编写 $concat 命令,有什么办法可以做到这一点吗?
$concat 是一个聚合管道,而不是更新操作符/修饰符。
似乎可以通过执行以下操作来实现您正在尝试做的事情:
db.col_1
.find({ "field_1": { $lt: 10000 } })
.forEach( function(i) {
db.col_1.update(
{ _id: i._id },
{ $set: { "field_1": "0" + i.field_1 } }
)
});
Run Code Online (Sandbox Code Playgroud)
为了使用另一个字段的值更新 MongoDB 字段,MongoDB 版本 4.2还引入了 $set 管道阶段运算符,它是 $addFields 的别名。您可以在此处使用 $set,因为它与我们想要实现的目标相对应。
let query = {
"field_1": {
$lt: 10000
}
};
let changes = {
$set: {
"field_1": {
"$concat": ["0", "$field_1"]
}
}
};
let UpdatedStatus = await col_1.updateMany(query, [changes]).lean();
console.log(UpdatedStatus);
Run Code Online (Sandbox Code Playgroud)