是否有任何方法可以从Node.js替换整个MongoDB集合中的特定字符串
关系模型:是否有任何方法可以从Node.js替换整个MongoDB集合中的特定字符串,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,关系模型: { "_id" : ObjectId("5fbcf721df079f4d03b5fc7c"), "user1" : "A", "user2" : "B", "user3" : "C" }, { "_id" : ObjectId("5fbcf721df079f4d03b5fc7d"), &
{
"_id" : ObjectId("5fbcf721df079f4d03b5fc7c"),
"user1" : "A",
"user2" : "B",
"user3" : "C"
},
{
"_id" : ObjectId("5fbcf721df079f4d03b5fc7d"),
"user1" : "B",
"user2" : "C",
"user3" : "A"
},
{
"_id" : ObjectId("5fbcf721df079f4d03b5fc7e"),
"user1" : "B",
"user2" : "A",
"user3" : "C"
}
我要替换所有出现的A到D
您可以尝试使用
$switch
进行更新:
db.your_collection.update(
{ },
[
{ $set: { user1: { $switch: {
branches: [
{ case: { $eq: [ "$user1", "A" ] }, then: "D" },
],
default: "$user1"
} } } },
{ $set: { user2: { $switch: {
branches: [
{ case: { $eq: [ "$user2", "A" ] }, then: "D" },
],
default: "$user2"
} } } },
{ $set: { user3: { $switch: {
branches: [
{ case: { $eq: [ "$user3", "A" ] }, then: "D" },
],
default: "$user3"
} } } },
],
{ multi: true }
);
上面的逻辑是对集合中的每个文档进行全面更新。我们对3个用户列中的每一列执行userx
值的有条件更新,仅在值与a
匹配的情况下才从a
更新到D
。否则,我们将保留每列的原始字段值
db.cueck.updateMany({ }, // instead of { } use a filter
[
{
"$addFields": {
"user1": { "$cond": [ { "$eq": [ "$user1", "A" ] }, "D", "$user1" ] }
// add "," and more users here
} }
])
- 您可能希望添加这样的筛选器:
{field:{$eq:“a”}
是$set
的别名,您可以使用其中一种$addFields
- 如果使用updateMany,则不需要
multi:true
$set
子句。或者,考虑改变您的表设计,这样每个用户就不必再创建另一个字段。@ VikasSuresh,所以我的感觉是,更好的设计可能是每个用户都有一个单独的Mango BSON文档,而不是单独的字段。但是,设计的选择是你的。明白了,我会改变模式。