Andrey
а вот еще одна особенность: Primary:18001 Secondary:18001 Arbiter:18100 порты разные
Andrey
сейчас лезу ковырять
AstraSerg
а вот еще одна особенность: Primary:18001 Secondary:18001 Arbiter:18100 порты разные
номера портов не важны, главное указать их в конфиге реплики
Andrey
номера портов не важны, главное указать их в конфиге реплики
спасибо большое! тогда я думаю пока все не зашло очень далеко, я покурю логи и пересоберу кластер. мне важно было знать мнение опытных людей по очень волнующим меня вопросам
Nick
Andrey
единственно могу сказать, что если на серваке с арбитрами больше ничего не крутится, то это трата ресурсов в пустую
там очень маленький сервер, но у него есть одно достоинство - его никто не будет трогать. он на виртуалке и количкство арбитров будет расти по мере роста задач. так что такую маленькую функцию вполне адекватно было разместить на таком сервере
Vladimir
Всем привет! У меня есть схема eventSchema, в ней есть prizes: [prizeSchema], в котором есть winners: [memberSchema], где есть user: { ref: 'user', type: mongoose.Schema.Types.ObjectId, } Как правильно популейтнуть юзера?
Vladimir
.populate({ path: 'prises.winners.user', model: 'user', select: '-sessions', });
Vladimir
?
Oleg
У меня кстати в таком варианте не сохранялись доки с глубиной больше 1
Oleg
То есть winners у меня не сохранялись
Vova
Подскажите, реально ли в одном запросе сделать следующее: Имеется документ { "comments": [ { "commentId": 1, ... } ] } Мне нужно удалить комментарий по его id, для этого я использую pull filter, но затем мне нужно у всех комментариев, которые стояли за удалённым, поменять их id на -1
Nick
какаято магия над номерами коментариев?
Nick
вообще обычный set с $inc:-1
Vova
вообще обычный set с $inc:-1
Так оно и на те что стояли до удалённого в массиве применит
Vova
Я уже придумал как сделать
Nick
фильтр же по ид
Nick
он у вас есть, т.к. вы по нему удаляли
Vova
Все айди идут по возрастанию, а сделаю update используя $gt от удалённого id
Nick
ну да я про это и говорил
Vova
arrayFilters я так понимаю понадобится
Nick
ага
Vova
А если коммент из середины удаляется то нужно смещать передние иначе похерится весь код, там привязка к количеству вхождений в комментах при генерации новых айди для новых комментов
Nick
это же вроде тот чел, который спрашивал как сделать инкремент, чтобы потом досылать коменты которые типа пропущены
yopp
ужас
Vova
Не я такого не спрашивал)
yopp
в любом случае — ужас
Nick
знач спутал, тогда вопрос зачем оно нужно актуален))
yopp
мутабельные id почти всегда кусают за жопу
Vova
фронтенд так заказал, я просто рву попку на беке
yopp
ещё хуже
yopp
а кто решение проектировал?
Vova
Это на экзамен проект) конечно в реальном проекте я бы такого не делал
Vladimir
То есть winners у меня не сохранялись
Мне запопулейтить, что бы без костылей фронту отдать)
Avral
Привет! Есть коллекции постов и авторов, у некоторых авторов нет постов. В объекте поста author это строка с никнеймом. Как получить всех авторов у которых есть посты ?
Vova
Документ: { "_id": 1, "Comments": [ { "CommentId": 1, "CommentText": "Fine" }, { "CommentId": 2, "CommentText": "Good" }, { "CommentId": 3, "CommentText": "Well done" } ] } Результат выполнения запроса: 1) Объект с CommentId: 2 удаляется 2) Объекты с CommentId: >2 сдвигается на -1 3) Объекты с CommentId: <2 без изменений Запрос: updateOne({ _id: 1 }, { $pull: { Comments: { CommentId: 2 } }, $inc: { "Comments.$[a].CommentId": -1 } }, { arrayFilters: [ { "a.CommentId": { $gt: 2 } } ] })
Vova
Не работает, что делаю неправильно?
Oleg
может кто-то дать пример кода который апдейтит запись в монго (на mongoose)? как ни пытаюсь, мой код не работает.
Oleg
UserData.updateOne( {login: logEmail}, {$set: {login_token}}, ); вот, например, что тут неправильно?
Nick
зачем использовать монгус если вы делаете нативные запросы? просто вытащите нужный объенкт, поменяйте его и сохраните
Oleg
а... можно пример?
Oleg
я просто гуглил, везде было updateOne/update.
Nick
я не настоящий js прогер поэтмоу из какойто поделки: let battle = yield Battle.findOne({province_id: battleFromApi.province_id, date: battleFromApi.date}); if (battle == null) { battle = new Battle(battlesFromApi); } Object.assign(battle, battleFromApi); battle.clan_id = clanId; battle.update_time = new Date(); yield battle.save();
Oleg
спасибо
Nick
Battle - модель
Vladimir
Есть кто живой?) Я чёт очкую это на проде запустить: ``` db.users.update({_id: ObjectId("5c00078998335f00139cded4")}, {restaurants: [ObjectId("5c00097898335f00139cdeee")]}) ``` Мне проект с монгой по наследству достался, а тут нужно срочняк на боевом поправить
Vova
Скажи что нужно сделать
Vova
Эта строчка ничего не сделает по моему
Vladimir
мне нужно было в массиве restaurants оставить один объект, я уже понял, что это не так делается) и рад, что у меня был результат find под рукой)
Vova
По ходу нужен $pullAll оператор чтобы удалить из массива все элементы, только ещё условие чтобы первый не удалял
Vladimir
> db.users.update({_id: ObjectId("5c00078998335f00139cded4")}, {restaurants: [ObjectId("5c00097898335f00139cdeee")]}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.users.find({_id: ObjectId("5c00078998335f00139cded4")}) { "_id" : ObjectId("5c00078998335f00139cded4"), "restaurants" : [ ObjectId("5c00097898335f00139cdeee") ] } Я сделал это))))
Vladimir
Потом пофиксил, полностью его перезаписав)
Vladimir
чуть не поседел, но за 3 секунды нашёл решение)
Oleg
лол
Igor
День, добрый. Первый раз вожусь с монгой, подскажите по query: У меня сейчас формируется такая штука в .find { '$and': [ { year: { '$gte': 2010, '$lte': 2013 } }, { meter: { '$gte': 23950, '$lte': 24951 } } ] } Она нормально фильтрует выборку, но если я добавляю еще и конкретный год через $eq ($in): { '$and': [ { year: { '$gte': 2010, '$lte': 2013, '$eq': 2049 } }, { meter: { '$gte': 23950, '$lte': 24951 } } ] } возращает пусто. А должено все года с 2010 по 2013 и 2049
Nick
потому что вы путаете И и ИЛИ
Nick
вам нужно больше 2010 И маньше 2013 ИЛИ равно 2049 а написано в запросе все через И
Igor
Я пробовал так: { '$and': [ { year: { '$gte': 2010, '$lte': 2013 } }, { meter: { '$gte': 23950, '$lte': 24951 } } ], '$or': [ { year: { '$eq': 2049 } } ] }
Igor
Результат тот же
Nick
$and и $or должны быть на разных уровнях вложенности
Nick
сейчас у вас написано (год:2010-2013 И meter:...) И (год:2049 ИЛИ ничего)
Nick
по умолчанию в монге верхний уровень воспринимается как $and, поэтому если он должен быть $or, то нужно явно указывать
Igor
Хмм, сейчас ракрыл специально и вроде все правильно https://i.imgur.com/2sNTVV1.png
Al
Всем привет! Нужна помощь( Как сделать внутри facet причем, что то типа left join?
Al
const folders = await this.aggregate([ { $match: { parent: ObjectId(folderId), deletedAt: null } }, { $facet: { folders: [ { $match: { isFile: false }, }, { $sort: sortCondition } ], files: [ { $match: { isFile: true } }, { $sort: sortCondition } ] } },
Nick
Хмм, сейчас ракрыл специально и вроде все правильно https://i.imgur.com/2sNTVV1.png
вы видимо не умеете в мат логику, приоритеты операций и понять что выражения первого уровня по монге объекдиняются через $and
Nick
{ $or:[ {$and: .....} {$and: .....} ]}
Al
Нужно добавить в выборку folders которая внутри facet. Данные о том есть ли для каждой folder ссылающаяся на нее folder.linkedTo = folder._id причем если такой нет, исключать записи не надо (left join)
Al
$lookup
Согласен.. А куда в какую стадию?
Nick
можно до фасета, можно внутри в конец
Al
можно до фасета, можно внутри в конец
нужно только к вот этой части facet применить..
Nick
ну и примените
Nick
что мешает после сорта вставить7
Al
а почему не после $match: { isFile: false } ?
Al
или не перед сортом?
Nick
можно и туда, от этого ничего не изменится
Al
можно и туда, от этого ничего не изменится
this.aggregate([ { $match: { parent: ObjectId(folderId), deletedAt: null } }, { $facet: { folders: [ { $match: { isFile: false } }, { $sort: sortCondition }, { $lookup: { from: "folders", localField: "_id", foreignField: "linkedTo", as: "shared" } } ], files: [ { $match: { isFile: true } }, { $sort: sortCondition } ] } }, { $project: { folders: { $concatArrays: foldersUp ? ["$folders", "$files"] : ["$files", "$folders"] } } }, { $unwind: "$folders" }, { $project: { _id: "$folders._id", name: "$folders.name", parent: "$folders.parent", user: "$folders.user", isFile: "$folders.isFile", fileSize: "$folders.fileSize", fileMimetype: "$folders.fileMimetype", shared: "$folders.shared", createdAt: "$folders.createdAt", updatedAt: "$folders.updatedAt" } },