Задать вопрос
Krasnodar_etc
@Krasnodar_etc
fundraiseup

Как в Монге записать значение свойства объекта в другое свойство этому же объекту?

Непонятный заголовок, сейчас объясню. У меня есть объект -
{
  name: 'qwerty',
  nameToo: '12345'
}


Как мне записать значение из nameToo в name ?
Пробовал с this, но он, что логично, указывает не на то:
db.getCollection('collection').update({nameToo: {$exists:1}},{$set: {name: this.nameToo}}, {multi:true})


name: undefined
  • Вопрос задан
  • 183 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Krasnodar_etc
@Krasnodar_etc Автор вопроса
fundraiseup
Ответа не слышу, в гугле тоже искать оч долго пришлось, напишу тут, вдруг кому надо будет)

db.getCollection('collection').find({
                nameToo: {$exists:1}
                }).forEach(
    function (elem) {
        db.getCollection('collection').update(
            {
                _id: elem._id
            },
            {
                $set: {
                    name: elem.nameToo
                }
            }
        );
    }
);


Сразу говорю, если у вас в базе 10000+ таких объектов, скрипт выполнится не быстро.
У меня он выдал непонятную ошибку, но сработал почти на всех объектах.
Пришлось через обычный update заменить name всем нужным объектам на рандомный, а затем в скрипте, который выше, делать выборку в find уже по этому name . Тогда всё отлично.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@emp1re
$lookup + $out in aggregation pipe linе
первое что в голову пришло, если хочешь сделать это в 1 query.
Вообще сочетаний операторов зависит от разницы документов и результата которого хочешь достичь. Но вариации практически не ограничены.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы