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

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

7 ответов

13 просмотров

Мб что-то из этого поможет 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. После чего выполнить запрос(-ы), где вы сами высчитаете длину массива.

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
1. https://www.kaggle.com/code/ahmadrezagholami2001/housing-estimation-linear-regression 2. https://www.kaggle.com/code/ahmadrezagholami2001/uncovering-quality-in-wines-logis...
Ahmadreza
1
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта