Как разделить массив строк, которые имеют запятую и обновляются как отдельные элементы?

#arrays #mongodb

#массивы #mongodb

Вопрос:

У меня есть данные коллекции mongo, как показано ниже:

 {
  "tag1" : {
    "tag2" : [ 
      "test,test1",
      "sample"
    ]
  }
}
  

Мне нужно обновить коллекцию, которая имеет "test,test1" значение в tag2 массиве, и обновить до отдельных элементов "test" "test1" , Поэтому результат должен быть таким:

 {
  "tag1" : {
    "tag2" : [ 
      "test",
      "test1",
      "sample"    
    ]
  }
}
  

Версия MongoDB: 3.6

Спасибо.

Ответ №1:

Вы можете попробовать,

  • $reduce для повторения цикла
  • $split чтобы разделить строку на ‘,’
  • $concatArrays чтобы объединить текущий массив и разделить массив строки
  • $out клонируйте все обновленные документы в новую коллекцию
 db.collection.aggregate([
  {
    $addfields: {
      "tag1.tag2": {
        $reduce: {
          input: "$tag1.tag2",
          initialValue: [],
          in: {
            $concatArrays: ["$$value", { $split: ["$$this", ","] }]
          }
        }
      }
    }
  },
  { $out: "empty collection name" }
])
  

Игровая площадка

Комментарии:

1. Спасибо. Я обновил вопрос. На самом деле, я хочу обновить все записи, как я упоминал в своем вопросе.

2. У меня есть обновленный ответ, который вы можете проверить, используйте $out, я не думаю, что в запросе mongodb 3.6 есть другие варианты, в противном случае вам придется делать это вручную с помощью js-кода после извлечения записей.

3. @VenugopalSeetharaman Есть ли что-то в предоставленном ответе, что, по вашему мнению, не отвечает на ваш вопрос? Если да, то, пожалуйста, прокомментируйте ответ, чтобы уточнить, что именно нужно решить, чего нет. Если это действительно отвечает на заданный вами вопрос, пожалуйста, обратите внимание, чтобы принять ваши ответы на вопросы, которые вы задаете