Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有任何方法可以从Node.js替换整个MongoDB集合中的特定字符串_Node.js_Mongodb_Mongoose - Fatal编程技术网

是否有任何方法可以从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

  • 是否有任何方法可以使用MongoDB完全替换A->D
  • 我能够获取所有数据,然后使用javascript替换来更改值并覆盖它们。是否有任何优化的解决方案

  • 您可以尝试使用
    $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

    谢谢,但是如果我有更多的用户字段,比如user1、user2、user3、user4。。。user15,或我要替换“A”的任何其他字段。换句话说,我要替换所有具有值“a”的字段。有什么办法可以做到吗?@viksh大多数数据库(包括Mongo AFAIK)都没有“更新所有列”的简短语法。您可能需要为要针对的每个列添加
    $set
    子句。或者,考虑改变您的表设计,这样每个用户就不必再创建另一个字段。@ VikasSuresh,所以我的感觉是,更好的设计可能是每个用户都有一个单独的Mango BSON文档,而不是单独的字段。但是,设计的选择是你的。明白了,我会改变模式。