Чатик, монга заставляет меня страдать. пишу запрос с updateMany, и не

могу догадаться, как обновить значение поля последнего элемента массива.
с первым элементом массива, как я понял, все просто: {$set: {"someArray.$.field": "value"}}
а как сделать такое с последним?

7 ответов

12 просмотров

Мб что-то из этого поможет db.collection.updateMany( { фильтр }, { $set: { "массив.$[элемент]": "новое_значение" } }, { arrayFilters: [{ "элемент": { $eq: { $arrayElemAt: ["$массив", -1] } } }] } )

Dubzer-(ꏿ﹏ꏿ๑) Автор вопроса
-
Мб что-то из этого поможет db.collection.updateMan...

чет ничего не обновляется при таком запросе. правда я set модифицировал так, что он стал "массив.$[элемент].поле". но вроде сломаться от этого не должно

Dubzer (ꏿ﹏ꏿ๑)
чет ничего не обновляется при таком запросе. правд...

db.collection.updateMany( {}, { $set: { "someArray.$[last].field": "value" } }, { arrayFilters: [ { "last": { $eq: { $arrayElemAt: [ "$someArray", -1 ] } } } ] } )

Dubzer-(ꏿ﹏ꏿ๑) Автор вопроса
Alexandrr
db.collection.updateMany( {}, { $set: { "som...

ничего не обновляет. запрос выдает matchedCount 19, а modifiedCount в итоге 0

Dubzer (ꏿ﹏ꏿ๑)
ничего не обновляет. запрос выдает matchedCount 19...

сли запрос выполняется без ошибок, но при этом modifiedCount равен 0, это может означать, что вам необходимо обновить документы, которые соответствуют фильтру, переданному в первом параметре функции updateMany. Проверьте, что ваш фильтр правильно выбирает документы, которые должны быть обновлены. Можно также попробовать выполнить запрос с использованием метода find вместо updateMany, чтобы проверить, соответствует ли ваш фильтр документам, которые вы хотите изменить. Также обратите внимание на наличие индексов на полях, которые вы используете для фильтрации. Отсутствие индекса может замедлить выполнение запроса и привести к тому, что изменения не будут внесены в документы. Если вы все еще столкнулись с проблемой, попробуйте добавить параметр { multi: true } в вызов updateMany, чтобы обновить все соответствующие документы: db.collection.updateMany( { /* ваш фильтр */ }, { $set: { "someArray.$[last].field": "value" } }, { arrayFilters: [ { "last": { $eq: { $arrayElemAt: [ "$someArray", -1 ] } } } ], multi: true } )

Dubzer-(ꏿ﹏ꏿ๑) Автор вопроса
Dubzer (ꏿ﹏ꏿ๑)
screenshot чатжпт чет нагаллюцинировал

То что выше вам скинул оно от части не работает т.к. условие $arrayElemAt: [ "$someArray", -1 ], возвращает сам элемент, а не index. В качестве решения можно сделать следующее: 1. Прокинуть функцию 2. Использовать курсор 3. Выполнить запрос аггрегации и получить _id и размер массива $size. После чего выполнить запрос(-ы), где вы сами высчитаете длину массива.

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

Обсуждают сегодня

Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Это переведённый текст с английского. Я не говорю на русском, но могу использовать переводчик Телеграм. Приветствую! Я начинающий веб-разработчик и все еще учусь. В настояще...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
3
А не хотим ли мы развлечься? 😉 Но так чтобы с пользой для наших профессиональных навыков?? 👨‍🎓👩‍🎓 Предлагаю на октябрь запланировать тестовый запуск новой командной игры "Игр...
Andrii Kurdiumov
2
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
5
у кого сколько оперативы на базе данных ?
АДИЛЬБЕК
4
Через бот апи возможно получить ID стикерпака? Не ссылку.
Vexylon [АФК до 09.09]
5
Привет Хочу сделать аналог iCloud’а для своих проектов, чтобы пользовательская информация хранилась в облаке, была доступна во всех сервисах, её можно было подсасывать везде)...
Виталий
9
В тг можно спарсить всех кто пишет в группе? Если список участников скрыт
S
3
код Event::listen('cms.page.display', function (&$content, $slug, $page, $html) { if (is_object($content)) { dump($content); } else { dump($s...
Point 111
3
Всем привет. Не понимаю, в чём тут шутка юмора. Убирается только разрешение на send_messages. А send_media_messages остаётся. Как сделать, чтобы оба убирались? await b...
Alexander
2
Карта сайта