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

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

7 ответов

6 просмотров

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

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

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

Всем привет. Подскажите, почему не меняется значение поля при переключении сайта?
Alexander Peterikov
11
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Добрый день, не подскажите, если в OC-V3 поменять страндартную директорию /storage/ на /storage2/ - не будет сильно много проблем ?
Max Dubovsky
32
Приветствую друзья, подскажите сколько в среднем стоит на данный момент создать тг бота который будет как магазин? Показывать ассортименты доставлять заказы и тд? Все по станд...
Eugene
3
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
А вот из практических задач на работе, кто работает расскажите относительно задач на работе, как вообще выживаете. Если есть желание, интересно тоже что и как сейчас с этим . ...
...
2
Привет. На сайте с видео установлена защита, не позволяющая скачивать видео, делать скриншоты и скринкасты, но это работает только с пк и устройств эпл. С андроида работают ск...
Lencore
1
Добрый день! Кто-нибудь знает как подключить твиг в контроллеры плагина?
Николай Афанасенко
5
@dblackCat Привет. Это же твой плагин? https://octobercms.com/plugin/catdesign-productbundle
Alexey Yakimov
5
Карта сайта