камил
камил
db.collection.insertOne({by:[{id:123, mark:10}]})
а как искать by.id к примеру?
Viktar
а как искать by.id к примеру?
Я вам написал в посте с регекспом
камил
понял
камил
db.collection.insertOne({by:[{id:123, mark:10}]})
хм, а как мне сделать значения 123 и 10 пустыми? 'by': [{'id': bool, 'mark': bool}] так?
камил
я обновляю поле by, с помощью update и использую $push
камил
как мне вводить туда по одному значению?
камил
допустим, мне нужно сделать push только id
Viktar
db.collection.updateOne({_id:7777},{$push:{by:{id:123}}})
камил
db.collection.insertOne({by:[{id:123, mark:10}]})
я пытаюсь сделать insert данных в таком виде, но получаю ошибку
камил
мне нужно чтобы изначально значения id и mark были пустыми
Viktar
Зачем вам такой элемент в документе? {id:'',mark:''} но не вижу смысла хранить пустые элементы в документе
Viktar
Да. Только меня смущают квадратные скобки
камил
все работает
камил
спасибо!
камил
Да. Только меня смущают квадратные скобки
Как я могу отсортировать by.mark? по убыванию
Viktar
Как я могу отсортировать by.mark? по убыванию
https://docs.mongodb.com/manual/reference/method/cursor.sort/
Евгений
Ребят, подскажите, если мне нужно записать текст в сообщение, которое лежит в дне, при этом массивы не созданы еще, то как это сделать и на правильном ли я пути?
Евгений
Anonymous
Ребят всем привет, кто может дать url базу для бота?)
Евгений
Народ, подскажите как получить элемент массива по индексу, в данном примере это 2.
Евгений
olga
Как-то давно пыталась решить примерно такую же задачу, но ничего не нашла в доке Ставлю на то, что это невозможно
Nick
Вам нужна агрегация и $elementAt
Евгений
Вам нужна агрегация и $elementAt
То что нужно) Только нигде не нашел применения вместе с findOne, можете подсказать пожалуйста как оформить запрос?
камил
Как получить случайную запись из базы, с указанием вот такого условия
камил
не понимаю как в агрегации передать условие
Nick
Как получить случайную запись из базы, с указанием вот такого условия
мне интересно а для чего случайная запись может понадобиться?
камил
мне интересно а для чего случайная запись может понадобиться?
Бот для оценивания пользователей, по кнопке оценить выдается случайная запись, которую ранее не оценивал юзер
Hunter
Когда у меня год в формате строки, оно сможет по нему сортировать или нужно что б в number было?
Iz
друзья пытаюсь написать докер файл для реплики с чем можеь быть эта ошибка связанна Cannot use non-local read concern until replica set is finished initializing. ?
Антон
Как получить все записи из коллекции с уникальным ключом? Я везде нахожу ответ, что по aggregate group, но тогда мне надо каждое поле указывать, а их там 20 штук
Антон
{name: ‘aaaa’, title: ‘11111’, … еще 20 разных полей} {name: ‘aaaa’, title: ‘22222’, … еще 20 разных полей} {name: ‘bbbbb’, title: ‘3333’, … еще 20 разных полей} должно выбрать только уникальные name, то есть {name: ‘aaaa’, title: ‘11111’, … еще 20 разных полей} {name: ‘bbbbb’, title: ‘3333’, … еще 20 разных полей} mongoose, js
Антон
Пока приходится писать так: App .aggregate([ { $match: {} }, { $sort: { 'date': -1, }}, { $group: { _id: '$name’, field1: {'$first': '$field1'}, field2: {'$first': '$field2’}, … field20: {'$first': '$field20’}, }} ])
Антон
а зачем вам сортировка в этой агрегации?
потому что значения в поле name могут быть не уникальными. а мне нужно получить только уникальные и последние
Viktar
потому что значения в поле name могут быть не уникальными. а мне нужно получить только уникальные и последние
у вас $name по любому будет уникальным, поскольку группировка по нему будет
Антон
у вас $name по любому будет уникальным, поскольку группировка по нему будет
{ name: ‘aaaaa’, date=’10.01.2022’} { name: ‘aaaaa’, date=’12.01.2022’} { name: ‘aaaaa’, date=’11.01.2022’} хочу получить { name: ‘aaaaa’, date=’12.01.2022’}
Евгений
Народ, подскажите пожалуйста, можно ли в монге сделать автоматический уникальный индекс, который будет увеличиваться на 1 с каждой новой записью в таблицу, а если удалили запись, то нумерация все равно продолжится с последнего элемента, хотя в таблице будет уже на 1 меньше
Viktar
{ name: ‘aaaaa’, date=’10.01.2022’} { name: ‘aaaaa’, date=’12.01.2022’} { name: ‘aaaaa’, date=’11.01.2022’} хочу получить { name: ‘aaaaa’, date=’12.01.2022’}
{ name: ‘aaaaa’, date=’10.01.2022’, {field1: value1}} { name: ‘aaaaa’, date=’12.01.2022’} { name: ‘aaaaa’, date=’11.01.2022’, {field1: value2}} как должен обрабатываться такой кейс?
Антон
{ name: ‘aaaaa’, date=’10.01.2022’, {field1: value1}} { name: ‘aaaaa’, date=’12.01.2022’} { name: ‘aaaaa’, date=’11.01.2022’, {field1: value2}} как должен обрабатываться такой кейс?
у меня количество полей везде одинаковое, поэтому { name: ‘aaaaa’, date=’12.01.2022’} и даже если не одинаковое, то все равно { name: ‘aaaaa’, date=’12.01.2022’}
Антон
если одинаковое, то вам достаточно взять последний элемент по дате.
не понимаю о чем вы. я так и делаю, сначал сортирую по дате, потом беру уникальные
Антон
{ name: ‘aaaaa’, date:’10.01.2022’, … еще 20 разных полей} { name: ‘aaaaa’, date:’12.01.2022’, … еще 20 разных полей} { name: ‘aaaaa’, date:’11.01.2022’, … еще 20 разных полей} {name: ‘bbbbb’, date: ‘11.01.2022’, … еще 20 разных полей} получаю { name: ‘aaaaa’, date=’12.01.2022’, … еще 20 разных полей} {name: ‘bbbbb’, date: ‘11.01.2022’, … еще 20 разных полей}
Антон
я к тому, что если какого то поля (fieldN) не будет в последней по дате записи, то вы получите нулл. Вот и спрашиваю правильное ли это поведение
почему я получу нул если не будет поля fieldN если у меня сортировка по полю date, а агрегация по полю name?
Viktar
почему я получу нул если не будет поля fieldN если у меня сортировка по полю date, а агрегация по полю name?
> db.ttt.insertOne({ "_id" : 1, "item" : "abc", "quantity" : 5, "date" : ISODate("2016-01-02T08:00:00Z") }) { "acknowledged" : true, "insertedId" : 1 } > db.ttt.insertOne({ "_id" : 2, "item" : "abc", "date" : ISODate("2017-01-02T08:00:00Z") }) { "acknowledged" : true, "insertedId" : 2 } > db.ttt.aggregate([{$sort:{date:-1}},{$group:{_id: '$item', quantity:{$first:'$quantity'}}}]) { "_id" : "abc", "quantity" : null }
Антон
нашел такой вариант, незнаю насколько он ок https://stackoverflow.com/a/69172245/4642436
Viktar
вам в люом случае придётся перечислять все поля
Viktar
а так у вас правильное решение для получения последней по времени записи, можно ещё виндоу функции использовать, но смысл тот же
Feodor
Добрый день встречаются ли реплики с двумя арбитрами? И как в таком случае разрешаются конфликты выбора при условии что число нод четное?
Dmitry
Добрый день встречаются ли реплики с двумя арбитрами? И как в таком случае разрешаются конфликты выбора при условии что число нод четное?
Так делать нельзя. Официальная рекомендация Mongo. Avoid deploying more than one arbiter per replica set https://docs.mongodb.com/manual/tutorial/add-replica-set-arbiter/
Nick
Пока приходится писать так: App .aggregate([ { $match: {} }, { $sort: { 'date': -1, }}, { $group: { _id: '$name’, field1: {'$first': '$field1'}, field2: {'$first': '$field2’}, … field20: {'$first': '$field20’}, }} ])
вместо fieldN: {$first: fieldN} можно сделать firstRoot: {$first: $$ROOT} $$ROOT - внутренняя переменная для обращения к текущему документу, таким образом вы разом сохраните полностью док, а не отдельные поля и потом если надо будет можно через $replaceRoot восстановить его после окончания группирвоки
Nick
Народ, подскажите пожалуйста, можно ли в монге сделать автоматический уникальный индекс, который будет увеличиваться на 1 с каждой новой записью в таблицу, а если удалили запись, то нумерация все равно продолжится с последнего элемента, хотя в таблице будет уже на 1 меньше
вы говорите про автоинкремент - его в монге нет и вам нужно реализовывать самостоятельно либо искать библиотеки для реализации. В общем случае при работе с монгой стоит хорошо обдумать зачем вам нужен автоинкремент и действительно ли он вам нужен и не закрывается ли это стандартными автоматическими идентификаторами
Евгений
вы говорите про автоинкремент - его в монге нет и вам нужно реализовывать самостоятельно либо искать библиотеки для реализации. В общем случае при работе с монгой стоит хорошо обдумать зачем вам нужен автоинкремент и действительно ли он вам нужен и не закрывается ли это стандартными автоматическими идентификаторами
Понял, спасибо, тогда другой вопросик, если я получаю записи с монги, то они всегда идут в том порядке в котором их записывали или могут быть в рандомном? П.с. запись в середину и прочее не юзаю, мне чисто последовательность нужно сохранить
Евгений
как угодно, порядок гарантируется только при использовании сортировки по полям указанным в сортировке
понял, значит сортировку все равно нужно писать, спасибо, хорошего вам дня)
Feodor
как так случилось что у вас планируется два арбитра? для какой цели второй?
Сейчас конфиг такой: [VM1:db, arb], [VM2: db2]. Если первая нода отрубается, то вторая без арбитра не может себя назначить главной. По-хорошему арбитра нужно на отдельную машину, но в силу лицензионных причин так сделать не можем
Feodor
вот такая особенност ьпостроения кластера, либо арбитр на отдеьлной виртуалке, либо кластер умирает с потерей арбитра и ноды
А если на каждой vm по арбитру? Когда тестил, оно вроде как работало, но в прод такое пускать опасаюсь
Erlan
добрый день
Erlan
когда надо включать авторизацию с ключом до или после создания replica set?
Kос
Привет. Есть 2 коллекции, user_actions и user_data. Мне нужно вытащить все данные из user_actions и подклеить 1 поле из user_data по user_actions.user_id (получаетя аналог JOIN). Подскажите, пожалуйста, как это лучше сделать?