mongodb обновляет тип данных поля с карты на массив - PullRequest
0 голосов
/ 11 марта 2020

как мы можем обновить тип данных поля в документе с карты на массив. Предположим, для следующего документа:

{
    "_id" : "someUniqueId:1234567890",
    "field1" : {
        "id" : "field1_id1",
        "type" : "field1_type1"
    },
    "field2" : "field2_value",
    "field3" : 1680
}

Я хочу обновить поле1, чтобы оно имело значение:

"field1" : [{
        "id" : "field1_id1",
        "type" : "field1_type1"
    }]

Я пробовал следующее:

db.getCollection('collection1').find({_id: "someUniqueId:1234567890"}).forEach(function(result) {
        db.getCollection('collection1').update({_id: result._id}, { $insert: { field1: [{"field1.id": result.field1.id, "field1.type": result.field1.type}] } })
});

также я пробовал $ pu sh и $ addToSet вместо $ insert, но безуспешно.

1 Ответ

1 голос
/ 11 марта 2020

Мы можем использовать update , чтобы получить результат

Запрос ниже делает изменение

db.collection_name.update(
  {},
  [{ $set: { field1: ["$field1"] } }],
  { multi: true }
);

Найти деталь - {}

Мы не предоставили здесь никаких условий для выбора указанных c документов для обновления, следовательно, обновление предназначено для всех документов в коллекции, если мы хотим ограничить обновление - пожалуйста, предоставьте условие для выбора соответствующих документов

Обновление детали - [{ $set: { field1: ["$field1"] } }]

Выполняет ли работа по превращению документа в массив

multi:true

Флаг установлен в true, чтобы мы могли обновить несколько документов

Обратите внимание - Запустите запрос только один раз в вашу коллекцию, если мы запустим его несколько раз, у нас будет вложенный массив для field1

Надеюсь, это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...