Eugene
с обновлением хук pre save не работает
Max
с обновлением хук pre save не работает
там их много -я дал пример просто
Anonymous
посомотри хуки. save, read и т.п.
сейв когда последний раз тыкал сейв, он не работал на апдейты. И рекомендовали костыль. Надо что-то, что работало бы на любое отправление данных в базу...
Max
тогда хз
Max
У меня тоже вопрос по доке: Setting connectTimeoutMS and socketTimeoutMS to the value 0 has a special meaning. It causes the application to use the operating system’s default socket timeout value. А когда в этом случае сокет отпадёт? ну чисто в теории? конекшен же не может быть потерян на вечно
Eugene
ну только если форкать и патчить под себя
Anonymous
допустим я буду делать сначала find, потом изменять как мне надо, и потом делать .save() , как мне тогда применить $set ?
Олег
подскажите, как победить ошибку Mongo Server error (MongoCommandException): Command failed with error 4568 (Location4568): 'Total size of documents in messages matching pipeline { $match: { $and: [ { rateId: { $eq: null } }, {} ] } } exceeds maximum document size' on server localhost:27017. —— то что тут в ошибке есть часть запроса, по факту в запросе такого нет
Олег
монга 4.0.1
yopp
тогда вот так: https://docs.mongodb.com/manual/core/aggregation-pipeline-optimization/#lookup-unwind-coalescence
yopp
корень вашей проблемы в том, что у вас as получается очень большим
yopp
и документ в пайплайне выпадает за 16мб
yopp
показывайте весь пайплайн, показывайте explain
yopp
что было, что стало
yopp
пример документов тоже
Олег
вот запрос, который еще вчера нормально работал, он не менялся с пол года db.getCollection("messages").aggregate( [ { "$match" : { "userId" : 13.0, "sended" : true, "meta.route" : { "$ne" : null }, "$and" : [ { "created" : { "$gte" : ISODate("2018-08-01T00:00:00.000+0000") } }, { "created" : { "$lte" : ISODate("2018-08-31T23:59:59.999+0000") } } ] } }, { "$group" : { "_id" : { "rateId" : "$meta.ratingInfo._id", "rateName" : "$meta.ratingInfo.name" }, "uniqueValues" : { "$addToSet" : "$meta.ratingInfo._id" } } }, { "$unwind" : "$uniqueValues" }, { "$replaceRoot" : { "newRoot" : "$_id" } }, { "$lookup" : { "from" : "messages", "localField" : "meta.ratingInfo._id", "foreignField" : "rateId", "as" : "operators" } }, { "$project" : { "rateId" : true, "rateName" : true, "operators" : { "$filter" : { "input" : "$operators", "as" : "operator", "cond" : { "$eq" : [ "$$operator.meta.ratingInfo._id", "$rateId" ] } } } } }, { "$project" : { "rateId" : true, "rateName" : true, "operators.meta.route.operator._id" : true, "operators.meta.route.operator.OrgName" : true, "operators.parts" : true, "operators.summ" : true, "operators.mcc" : true, "operators.channel" : true } } ], { "allowDiskUse" : false } );
Олег
пример результата, к сожалению не смогу показать, из-за ошибки
yopp
"$filter" : { "input" : "$operators", "as" : "operator", "cond" : { "$eq" : [ "$$operator.meta.ratingInfo._id", "$rateId" ] } } если я не ошибаюсь, то вы можете это пернести в pipeline внутри $lookup
yopp
но в любом случае, если у вас может быть много документов в $operators вам неизбежно придётся делать $unwind по этому полю
Олег
так проблема в том, что до $filter даже не доходит, все заканчивается на $lookup
yopp
ещё раз: у вас в operators попадает большое число документов и размер записи перешагивает 16мб. Вам необходимо это исправить. У вас есть два варианта: $unwind по operators _сразу_ после $lookup или pipeline внутри $lookup чтоб сразу отфильтровать лишние записи
yopp
я бы использовал обе опции
Nick
как насчет просто найти тот самый проблемный идшник?
yopp
проблема не в айдишнике, а в запросе
Олег
а еще там проблема в том, что массив operator не так просто вынести, т.к. на уровень выше тоже данные есть
Олег
еще момент чем можно заменить $filter в pipeline?
yopp
Как вам такое?
Andrew
Кто-нибудь знает как правильно исключать данные из результата, если в одной коллекции хранится несколько моделей?
Nick
Как вам такое?
Куда смотреть?
yopp
Куда смотреть?
весь сок справа: выводится результат каждого стейджа в пайплайне
Nick
Это в составе какойто тулзы или сам делал?
yopp
100% NIH, обижаешь!
yopp
будет свой плейграунд, а то для монги ничего приличного вообще нет
Andrew
ребята подскажите пожалуйста можно где поспрашивать не стандартные вопросы по поводу монги? или только к разработчикам библиотек обращаться?
yopp
тут и задавайте
Andrew
тут и задавайте
да я уже неделю вкидываю сюда что-то, и никогда не ответили, вот и спрашиваю мб еще есть чаты по теме
yopp
если в коллекции разные схемы, то добавьте какой-то аттрибут описывающий тип данных, сделайте по нему индекс и добавьте в запрос $eq
yopp
да я уже неделю вкидываю сюда что-то, и никогда не ответили, вот и спрашиваю мб еще есть чаты по теме
если вы хотите чтоб вам гарантированно отвечали, то можно на это можно купить подписку https://db-ai.co
yopp
а так это бесплатный чат, в котором отвечают когда отвечается
yopp
так ещё есть @ru_dba
yopp
discriminator сам добавляет тип
тогда используйте поле с типом как условие в выборке
yopp
@dba_ru значит!
Andrew
yopp
тогда зачем вам нечего исключать же
Andrew
тогда зачем вам нечего исключать же
ну так у всех моделей разные поля, у одних одни надо исключить, у других другие
Max
100% NIH, обижаешь!
ммм, что это?
yopp
NIH? Not invented here!
yopp
если вы храните разные данные в коллекции, зачем вам что-то исключать при выборке?
yopp
вам надо фильтровать поля при вставке
Andrew
если вы храните разные данные в коллекции, зачем вам что-то исключать при выборке?
потому что есть информация которую не нужно публично отображать
yopp
вы подробно опишите свою проблему, с примерами
yopp
сейчас ничего не понятно
Andrew
вот пример двух аккаунтов из коллекции, как видите они имеют различия
Andrew
Вот так я аккаунт получаю, мне нужно поля удалять из результата, в зависимости от того какой именно тип аккаунта
Andrew
yopp
добавьте проекцию
yopp
https://docs.mongodb.com/manual/tutorial/implement-field-level-redaction/
yopp
на мой взгляд, отвественность за проекции полей лежат на той сущности, которая отвечает за тип
yopp
т.е. если у вас там разные типи, сделайте рефлексию этих типов в виде классов, в классе настройте проекции
Andrew
спасибо, буду читать
yopp
но я не знаю как в ноде с этим
Andrew
есть какойто сокращенный гайд с примерами, где и что применять лучше всего
yopp
в руби очень просто было: наследуемся от основного класса и дальше при получении объектов, они инстанцируются в нужный класс
yopp
точнее в монгоиде
Andrew
это много)
yopp
раздел с туториалами стоить хоть раз просмотреть
yopp
а вот и не много