#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 Есть ли что-то в предоставленном ответе, что, по вашему мнению, не отвечает на ваш вопрос? Если да, то, пожалуйста, прокомментируйте ответ, чтобы уточнить, что именно нужно решить, чего нет. Если это действительно отвечает на заданный вами вопрос, пожалуйста, обратите внимание, чтобы принять ваши ответы на вопросы, которые вы задаете