Igor
будет ли работать вот такой unwind: {"$unwind":{"path":"outer_array.inner_array"}}? То есть, можно ли вытягивать отдельно элементы по одному из дважды вложенного в документ массива а-ля: { outer_array: [ ... { inner_array: [...] }, ... ] }
yopp
Нужно делать два последовательных анвинда
Igor
Нужно делать два последовательных анвинда
Да, уже проверил (просто было довольно долго это кодить ^__^)
Igor
Спасибо
Talgatio
https://jsfiddle.net/s163ec4y/
Talgatio
Как мне сделать апдейт инстанса, если обновляемое свойство у меня массив
Talgatio
members: [ { type: String } ]
Talgatio
Ок перефразирую вопрос. У меня есть компания и у компании есть резеденты. При регистрации нового резидента я делаю сет по айди компании в массив резидентов, но вместо того чтобы данные добавлялись в массив, они просто меняются. Как это пофиксить?
Nick
что значит "меняются" добавление тоже изменение
Talgatio
Мне надо чтобы данные пушились
Nick
https://docs.mongodb.com/manual/reference/operator/update/addToSet/
Igor
Добавление к массиву элементов.
Talgatio
даааа
Nick
если элементы уникальны и не должны дулироваться то addToSet
Igor
если элементы уникальны и не должны дулироваться то addToSet
А как уникальность определяется? Полное сравнение под-документа?
Talgatio
https://jsfiddle.net/7g1shLe2/
Nick
на уровне монги не знаю, скорее всего через проход по массиву и сравнению поэлементно
Nick
собственно плата за отутствие дублиатов будет присутвовать
Igor
на уровне монги не знаю, скорее всего через проход по массиву и сравнению поэлементно
Фу, гадость какая. ИМХО, такое лучше уж программно делать...
Talgatio
Тип данных для _id?
Nick
вообще тут лучше бы запросить инфу у более иформированных участников, чтоб лишний раз не гнать намонгу)
Talgatio
ObjectId?
Talgatio
message: 'The field \'members\' must be an array but is of type string in document {_id: ObjectId(\'5a06e0e9b576731bf8d7763a\')}',
Nick
Фу, гадость какая. ИМХО, такое лучше уж программно делать...
т.е. лучше гонять трафик из монги, делать дополнительный запрос на выборку перед апдейтом, вместо атомарного апдейта?
Alexander
Не силён пока в монге. А разве апдейта типа {a: 1, ...rest} нет?
Nick
message: 'The field \'members\' must be an array but is of type string in document {_id: ObjectId(\'5a06e0e9b576731bf8d7763a\')}',
в монгусе не секу, но похоже твой случай массив ObjectId элементов
Nick
http://mongoosejs.com/docs/schematypes.html поиск по ofObjectId
Nick
там предлагается какойто тип Schema.Types.ObjectId
Nick
Не силён пока в монге. А разве апдейта типа {a: 1, ...rest} нет?
есть, собственно товарисчь предлагает самостоятельно контролировать отсутвие дубликатов в приложухе, вместо использования стандартных средств монги
Alexander
Второй вариант - фильтровать при запросе. Но, это более затратно.
Nick
я в жаваскирптах не пишу, что за такая функция интересная "find.then", типа выполнить дейсвие с результатом файинда?
Alexander
Это промисы
Точно :) А то у меня пятница 22:40 уже )))
Alexander
Владивосток
Viktor
Владивосток
хоть кто-то с дв :)
Alexander
Talgatio
Владивосток
жесть)))) у меня суббота 14:45
Alexander
жесть)))) у меня суббота 14:45
Блять... Уже суббота?
Viktor
Ты откуда? )
хабаровск
Alexander
Внезапно
Igor
есть, собственно товарисчь предлагает самостоятельно контролировать отсутвие дубликатов в приложухе, вместо использования стандартных средств монги
У меня то в принципе к счастью такого не случится, ибо каждое действие вытекает в дубликат с инкрементов версии, а ключ у любого документа и поддокумента имеет вид _id:{uuid:"", version:""}
Nick
.find({...}).then(red=>{...})
Чтото эти промисы не кажутся атомарными, перед следующим апдейтрм после поиска пройдет какоето время, за которое в базе може этот док даже исчезнуть не говоря об простом изменении
Igor
гадость?
Поэлементное сравнение документов, которые могут быть очень, нет, ОЧЕНЬ большими, это очень и очень грустно. Лучше вытащить проекцию идентификаторов и сравнить уж их.
yopp
не могут они быть ОЧЕНЬ большими
yopp
банально из-за ограничения на размер документа
yopp
это раз
yopp
«вытащить проекцию» это уже не _атомарная_ операция
yopp
более того, вытащить это сеть. сеть это миллисекундные задержки.
yopp
не говоря уже о том, что «проекция индентификаторов» будет и так требовать чтения всего документа
yopp
tl;dr: для добавления элемента в массив, если требуется сохранять уникальность элементов, то $addToSet. Если добавлять туда поддокументы, то клиенту необходимо гарантировать одинаковый порядок полей. Пушо {a: 1, b: 2} != {b: 2, a: 1}
Nick
Поэлементное сравнение документов, которые могут быть очень, нет, ОЧЕНЬ большими, это очень и очень грустно. Лучше вытащить проекцию идентификаторов и сравнить уж их.
тут наверно какая-то непонятка, сравнение не документов а элементов массива, который находится в каком-то документе
Server
Что не так? db.getCollection('users').findOne({_id: 5a07118d020b152d1918db6c}) 2017-11-11T18:58:54.867+0300 E QUERY [thread1] SyntaxError: identifier starts immediately after numeric literal @(shell):1:40
Server
и так не ищет db.getCollection('users').findOne({_id: "5a07118d020b152d1918db6c"}) в коллекции такой _id находится
Server
https://docs.mongodb.com/manual/reference/method/ObjectId/
благодарю! нужно было так искать db.getCollection('users').findOne({_id: ObjectId("5a07118d020b152d1918db6c")})
Anonymous
ребята, кто может помочь запустить вот этот чат? https://github.com/iliakan/chat
Anonymous
все запускается, но сообщения не отправляются
Arthur
Подскажите каким образом можно переместить документы из одной коллекции в другую коллекцию?
Arthur
желательно на mongoose
Slava
а как много документов в коллекции и какая write/update нагрузка на нее ?
Arthur
нагрузка маленькая. документов тоже
Arthur
может есть готовое простое решение?
Slava
готовое простое решение это открыть курсор на коллекцию и начать вставлять в другую, самый просто вариант, при это не забыть выставить верный таймаут курсору
Arthur
спасибо, посмотрю
Slava
к сожалению не владаю mongoose так бы пример накидал)
Arthur
уточнение, переместить надо не все документы. только определенную выборку
Slava
можно на mongo native
https://docs.mongodb.com/manual/tutorial/iterate-a-cursor/
Anonymous
Здравствуйте. Посдкажите, как в аггрегации мне получить количество всех документов - полем в каждом документе?
tenni
https://www.mongodb.com/mongodb-3.6 RC вышла