Andru
вот так сделал пока
const posToDelete = game.items.findIndex(e => e.id === model.id);
game.items.splice(posToDelete, 1);
await game.save();
Andru
но почему-то понадобилось несколько раз это пройти, удаляло по половине айтемов за проход. Типа изначально было 16 элементов на удаление, после первого прохода осталось 8, после еще прохода осталось 4 и тд )
Nick
а вам очистить?
Andru
да, вот так делаю - не пашет
const asd = await game.update({ id: id }, { $pull: { items: { apply: null } } });
Andru
ошибок никаких
Nick
а просто $set:{items:[]} не пробовали?
Andru
а мне не все надо удалять, а только где в items apply=null
Nick
db.survey.update(
{ },
{ $pull: { results: { $elemMatch: { score: 8 , item: "B" } } } },
{ multi: true }
)
Nick
из примера к пулу
Nick
https://docs.mongodb.com/manual/reference/operator/update/pull/
Andru
Andru
спс
Andru
без multi: true ошибок нет, но и ничего не удаляет, с multi ошибка callback.apply is not a function
Andru
попробую еще в нодежс чате спросить, спасибо вам
Andru
Продолжается все-таки моя эпопея)) использую mongoose хочу сделать удаление определенных элементов в документе $pull: { items: { apply: null } } - не канает
пробовал удалять по одному $pull: { items: { _id: id } } - так ок
то есть какая-то проблема в условии apply: null, но как сделать правильно я не могу найти
Nick
указывайте elemMatch
Nick
а не фильтр
Andru
В доке написано, что одно и тоже
Nick
а пробовали?
Andru
Да
Nick
Да
дико извиняюсь за отсылку к elemMatch, поспешил и не вчитался в доку
In fact, the following operation will not pull any element from the original collection.
Nick
кто ж доудмался не выделить большими красными жирными буквами will not pull
Nick
Nick
я вчера протестировал в монгошеле и никаких доп действий при работе с нулом не требовалось
Andru
Nick
пример теста можно?
добавил в коллекцию несколько объектов вида
{
"items" : [
{
"id" : 1,
"apply" : null
},
{
"id" : 2,
"apply" : true
},
{
"id" : 3,
"apply" : null
}
]
}
потом выполнил ваш запрос на апдейт
db.getCollection('tst2').update(
{ },
{ $pull:{items:{apply:null}}},
{ multi: true }
)
и вставленные доки првратились в
{
"_id" : ObjectId("5b236b2d0c3f7c79b6fdea75"),
"items" : [
{
"id" : 2,
"apply" : true
}
]
}
Andru
А может быть связано с тем, что items я заполняю через populate?
Nick
так гляньте как выглядят доки в базе
Andru
После populate значение apply становится null, так как в связанной коллекции этого значения уже нет. Вот их мне и надо удалить из items коллекции game
Nick
Покажите значение с нулом, которое пытаетесь удалить а не левые доки
Andru
а я не знаю, как в studio 3t сделать populate, это же по-моему чисто монгусовская фишка?
Nick
Вот все проблемы орм налицо - люди не умеют работать с бд
Nick
Возьмите кусок кода на монгусе и выполните на тестовой коллекции на тестовых данных
Nick
Тот этап, после которого в доках должны моявиться нулы
Andru
Andru
Так я и смотрю. В монго еще не все освоил)
Павел
Добрый день, подскажите пожалуйста почему может не проходить аутентификация при коннекте по uri:
mongodb://user:pass@host:port/schema
но при этом по uri
mongodb://user:pass@host:port/?authSource=schema
коннектится успешно
пользователь user создан именно в схеме schema (не в admin)
Nikita
Вы разве не ответили сами на свой вопрос?
Павел
есть еще одна БД (в настройке которой я не участвовал), с первого взгляда настройки идентичны, во второй БД успешно проходит коннект в обоих случаях
Павел
вопрос снимается, была ошибка/опечатка в строке коннекта
Andru
Тот этап, после которого в доках должны моявиться нулы
Вощем оказалось вот что, это работает const asd = await Game.update({ _id: id }, { $pull: { items: { apply: null } } });
Но только если в коллекии items есть хоть один элемент, где apply is not null, если все null, то ничего не удаляет, если есть что-то not null, то удаляет все, кроме элемента с not null
yopp
https://www.mongodb.com/blog/post/secondary-reads-mongodb-40?jmp=twt&utm_source=4244&utm_medium=TWITTER&utm_term=4&linkId=53032474
yopp
Stable: 3.6.5 (May 25, 2018), Bugfix: 3.4.15 (May 16, 2018), Upcoming: 4.0.0-rc3 (Jun 6, 2018)
MongoDB quick overview/production notes: https://www.percona.com/live/e17/sites/default/files/slides/Running%20MongoDB%20in%20Production%20-%20FileId%20-%20115299.pdf
4.0.0-rc3: https://groups.google.com/forum/m/#!topic/mongodb-user/M6KivWS6Ky4
3.6.5: https://docs.mongodb.com/manual/release-notes/3.6/#may-29-2018
3.4.15: https://docs.mongodb.com/manual/release-notes/3.4/#may-16-2018
3.2.20: https://docs.mongodb.com/manual/release-notes/3.2/#may-10-2018 (End of life: September 2018)
3.0.x: Support ended February 2018
yopp
MongoDB 4.0.0-rc3: https://groups.google.com/forum/m/#!topic/mongodb-user/M6KivWS6Ky4
Мечтатель
Сергей
Привет)
Подскажите плиз, как написать запрос в mongoose)
Есть коллекция элементов users
У юзера есть два поля counter_1 и counter_2, мне надо достать всех юзеров у которых counter_1 !== counter_2.
Не могу сообразить как такое написать (
Nick
$expr
Alexandr
Ребят подскажите плс, есть коллекция документов, в каждом документе есть массив поддокументов, мне нужно сделать выборку последних значений в поддокументах
Артем
Ruslan
Ащпе, шайтан машина будет
Ruslan
Жаль стримы только через репликасеты
Ruslan
(я не про 4.0)
Артем
Ну а потом сам знаешь) MoracleDb будет))
Сергей
$expr
Спасибо, не знал про этот оператор)
yopp
Ruslan
Wtf? :)
yopp
https://www.mongodb.com/blog/post/multi-document-transactions-in-mongodb
SvPupok
поддержка транзакционности на уровне репликасета это уже очень круто.
Anonymous
Nikita
привет всем!, использую mongoose, как в нем реализовать проверку на существующию модель если есть то обновить если нет то сохранить (сильно не пинайте 😃)
Andru
Andru
Конкретнее задачу опиши
Andru
У меня в одной модели должна быть при любом раскладе только одна запись всегда, тут проверяю через count === 1
Nikita
Конкретнее задачу опиши
У меня есть запрос к стороннему апи с последующим сохранением результата в бд при любом раскладе эта запись должна быть одна (раз записалась, дальше только обновляется )
Andru
Nikita
Andru
спасибо попробую
Может есть болен элегантный способ) я сам еще нуб в монге и ноде
Nikita
Nikita
Anonymous
Nikita
Спасибо ребята, гляну, пока не у компа, всем добра ))
Nick
в данном случае обычный update с выставленным upsert:true. главное задать корректный фильтр
Nikita
Nick
https://docs.mongodb.com/manual/reference/method/db.collection.update/#use-unique-indexes
Nick
db.people.update(
{ name: "Andy" },
{
name: "Andy",
rating: 1,
score: 1
},
{ upsert: true }
)
Nick
во это пря ваш случай
https://docs.mongodb.com/manual/reference/method/db.collection.update/#insert-a-new-document-if-no-match-exists