Nick
если что всегда можно сделат ьколлекцию с одним документом со счетчиком внутри и его инкрементить
Евгений
Да, просто думал, если есть способ автоматом
Евгений
В sql на крайняк при вставке можно было бы триггер влепить
Евгений
В монге фигово, триггеров я как понимаю не завезли))
Nick
именно так
Евгений
Мде, им есть над чем подумать)
Nick
есть ченж стримы и можно отслеживать события, но это сильно отличается от триггеров
Евдоким
Вопрос. Если есть варианты сделать одну большую коллекцию или три маленьких со ссылками одна к другой, есть какие важные критерии для выбора? Не в плане удобства, а с технической стороны
Евгений
Я как понимаю в монге лучше множить данные)) Тебе же удобнее будет с ними работать)
Nick
множит ьне всегда удается - есть базовое ограничение на размер документа в 16 метров и если хочется делать мегадокументы, то есть шанс вылезти за размер и все поломается
Евгений
Это да, но 16 метров - это много) Да я про мелкие поля
Евгений
Типа не делать отдельно коллекцию languages с ссылкой на строку 'ру' и ключём)
Андрей
Почему сохраняется как строка, а не как ObjectId?
Андрей
Андрей
Просто делаю аналогичным образом для другого поля и там при сохранении ObjectId
Евдоким
Тоже такое было с моделью mongoose, не разобрался, забил, прямо при создании документа обернул строку id в Types.ObjectId()
Андрей
Причем это никаких удобств не вызывает, только визуально не красиво, и ощущение что это не правильно есть
Евдоким
Возможно, но я преобразовал потому, что популяции не работали, а потом оказалось, что они не работали потому что руки у меня не оттуда, так что возможно никаких проблем это не доставит
Андрей
Я проверил, популяции работают в обоих случаях)
Евдоким
Значит я зря фигней страдал)
Гена
Всем привет
Гена
Готовлюсь к апгрейду и всё вроде понятно кроме вот этого пункта
Гена
https://docs.mongodb.com/manual/release-notes/3.6-upgrade-replica-set/#enable-backwards-incompatible-newversion-features
Гена
что эта фича даёт?
Гена
очень как-то сложно написано...
Андрей
setFeatureCompatibilityVersion?
Yaroslav
всем привет { "deal_types": { "$elemMatch": { "$and": [ { "deal_type_id": "2ac9f589-3e66-4f05-9037-d2d1bf66041a" }, { "filter_values": { "$elemMatch": { "$and": [ { "filter_attribute_id": "680d7f38-303e-44a2-80da-b665ce7e" }, { "$gte": [ "$value", 10 ] } ] } } } ] } } } в этом запросе не работает $gte? как поправить?)
Nemo
хай народ подскажите. как мне после сохранения обьекта. вернуть его. что бы потом использовать его objid например.
Nemo
Maxim
Доброй ночи, кто-нибудь подключался к БД mongo на heroku по php?
Arystan
Всем салем. хотел бы узнать: как можно удалить объект из документа?
Arystan
объект не в массиве
Maksim
$unset не подойдёт ?
Maksim
доброе утро, есть вопрос по elections 0) есть replica set c 5 members: primary (priority 4, votes 1), secondary (p3, v1), s(p2, v1), s(p1, v1), hidden(p0, v1) 1) настроил на каждой ноде percona exporter для prometheus 2) имитирую потерю связности с primary: через iptables выключаю 27017 3) репликасет впадает в состояние "постоянных выборов": в клиенте Robo 3T рефреш долго выполняется и не всегда проходит, когда проходит меняется primary каждый раз, метрика mongodb_mongod_replset_term в прометее скачет, получая новый term в том числе от hidden ноды 4) пробовал менять приоритеты на: 16, 8, 4, 2, 0 / 16, 8, 4, 0, 0 / 4, 2, 2, 2, 0: результат примерно такой же (с одинаковым на secondary по ощущениям было стабильнее, но не точно) 5) версия 3.6.3, protocolVersion = 1, chainingAllowed = true, heartbeatIntervalMillis = 2000, heartbeatTimeoutSecs = 10, electionTimeoutMillis = 5000, catchUpTimeoutMillis = -1, catchUpTakeoverDelayMillis = 30000 6) после включения оригинального primary всё приходит в норму 7) если подавать нагрузку, то записи ожидаемо фейлятся (не все) 8) если делать через rs.stepDown(), то процесс также не прекращается пока primary не станет оригинальная это ожидаемое поведение ? или что-то в конфигурации не так и можно добиться стабильного состояния при недоступной оригинальной primary ? подскажите куда копать, что смотреть ?
Nick
доброе утро, есть вопрос по elections 0) есть replica set c 5 members: primary (priority 4, votes 1), secondary (p3, v1), s(p2, v1), s(p1, v1), hidden(p0, v1) 1) настроил на каждой ноде percona exporter для prometheus 2) имитирую потерю связности с primary: через iptables выключаю 27017 3) репликасет впадает в состояние "постоянных выборов": в клиенте Robo 3T рефреш долго выполняется и не всегда проходит, когда проходит меняется primary каждый раз, метрика mongodb_mongod_replset_term в прометее скачет, получая новый term в том числе от hidden ноды 4) пробовал менять приоритеты на: 16, 8, 4, 2, 0 / 16, 8, 4, 0, 0 / 4, 2, 2, 2, 0: результат примерно такой же (с одинаковым на secondary по ощущениям было стабильнее, но не точно) 5) версия 3.6.3, protocolVersion = 1, chainingAllowed = true, heartbeatIntervalMillis = 2000, heartbeatTimeoutSecs = 10, electionTimeoutMillis = 5000, catchUpTimeoutMillis = -1, catchUpTakeoverDelayMillis = 30000 6) после включения оригинального primary всё приходит в норму 7) если подавать нагрузку, то записи ожидаемо фейлятся (не все) 8) если делать через rs.stepDown(), то процесс также не прекращается пока primary не станет оригинальная это ожидаемое поведение ? или что-то в конфигурации не так и можно добиться стабильного состояния при недоступной оригинальной primary ? подскажите куда копать, что смотреть ?
не спец в кластеростроении, но вижу что достаточно старая версия монги, вам бы ее хотя бы по минорам догнать до финальной 3.6.19
Nick
и смущает четное число голосов
Maksim
попробую обновить для проверки, а почему чётное ? 1 primary, 3 secondary и 1 hidden, они же все голосуют, разве нет ?
Nick
доброе утро, есть вопрос по elections 0) есть replica set c 5 members: primary (priority 4, votes 1), secondary (p3, v1), s(p2, v1), s(p1, v1), hidden(p0, v1) 1) настроил на каждой ноде percona exporter для prometheus 2) имитирую потерю связности с primary: через iptables выключаю 27017 3) репликасет впадает в состояние "постоянных выборов": в клиенте Robo 3T рефреш долго выполняется и не всегда проходит, когда проходит меняется primary каждый раз, метрика mongodb_mongod_replset_term в прометее скачет, получая новый term в том числе от hidden ноды 4) пробовал менять приоритеты на: 16, 8, 4, 2, 0 / 16, 8, 4, 0, 0 / 4, 2, 2, 2, 0: результат примерно такой же (с одинаковым на secondary по ощущениям было стабильнее, но не точно) 5) версия 3.6.3, protocolVersion = 1, chainingAllowed = true, heartbeatIntervalMillis = 2000, heartbeatTimeoutSecs = 10, electionTimeoutMillis = 5000, catchUpTimeoutMillis = -1, catchUpTakeoverDelayMillis = 30000 6) после включения оригинального primary всё приходит в норму 7) если подавать нагрузку, то записи ожидаемо фейлятся (не все) 8) если делать через rs.stepDown(), то процесс также не прекращается пока primary не станет оригинальная это ожидаемое поведение ? или что-то в конфигурации не так и можно добиться стабильного состояния при недоступной оригинальной primary ? подскажите куда копать, что смотреть ?
по имитации потери связи - а исходящий трафикна другие ноды вы тоже режете или только входящий на праймари ноду?
Nick
hidden(p0, v0)
Maksim
ошибся, hidden(p0, v1)
Maksim
по имитации потери связи - а исходящий трафикна другие ноды вы тоже режете или только входящий на праймари ноду?
изначально только на праймари, после небольшой паузы (1-3 минуты), пробовал другие вкл/выкл, включая хидден, картины не меняло
Nick
посмотрите на активные коннекты между нодами, возможно недостаточно убрать 27017 порт и нужно либо положить процесс монги либо разорвать все соединения до нее
Maksim
ок, сейчас попробую застопить для начала
Maksim
спасибо, с отключением сервиса на ноде поведение корректное, буду дальше курить как правильно имитировать без выключения
Maksim
ок, покурю с админами этот момент, ещё раз спасибо
A
Добрый день. Для вывода информации из коллекции из локальной базы данных Mongo я использую метод .find. Подскажите,пожалуйста, как я могу воспользоваться полученными данными. Например, использовать где-то еще, провести их по циклу? const mongoose = require('mongoose'); const fs = require('fs'); var Schema = mongoose.Schema; mongoose.connect('mongodb://localhost/', {user: "test", pass: "test", useNewUrlParser: true, useUnifiedTopology: true}, () => console.log('connected to mongodb')); // устанавливаю связь с базой const db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); mongoose.model('Manufacturer', new Schema({ _id: mongoose.Schema.Types.ObjectId, id: Number, name: String }), 'manufacturers' //Коллекция, к которой я подключаюсь ); var manuf = mongoose.model('Manufacturer'); //метод manuf.find({}, function(err, data) { console.log(err, data);}); //например, я хочу прогнать по циклу for (let i = 0; i <data.length; i++) { console.log (data[i].id); }
Nick
Добрый день. Для вывода информации из коллекции из локальной базы данных Mongo я использую метод .find. Подскажите,пожалуйста, как я могу воспользоваться полученными данными. Например, использовать где-то еще, провести их по циклу? const mongoose = require('mongoose'); const fs = require('fs'); var Schema = mongoose.Schema; mongoose.connect('mongodb://localhost/', {user: "test", pass: "test", useNewUrlParser: true, useUnifiedTopology: true}, () => console.log('connected to mongodb')); // устанавливаю связь с базой const db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); mongoose.model('Manufacturer', new Schema({ _id: mongoose.Schema.Types.ObjectId, id: Number, name: String }), 'manufacturers' //Коллекция, к которой я подключаюсь ); var manuf = mongoose.model('Manufacturer'); //метод manuf.find({}, function(err, data) { console.log(err, data);}); //например, я хочу прогнать по циклу for (let i = 0; i <data.length; i++) { console.log (data[i].id); }
вот будерете этот цикл и его после логирвоания результатов ставите вколбеке. Если кобек хелл не нравится, то перехотие на async/await
Nick
ответ не очень поняла
//метод manuf.find({}, function(err, data) { console.log(err, data); for (let i = 0; i <data.length; i++) { console.log (data[i].id); } });
Stanislav
Всем привет. А можете кинуть в меня ссылкой на подробный мануал по настройке Encryption at REST? Если можно, на русском. А то я доку монгодб листаю, но что-то там нахожу только рассказы что это такое, а вот как его есть никак не могу найти. И вообще, подскажите, это то что надо или нет, если у меня стоит вот такая задача про одно конкретное поле в таблице - When saving to DB - encrypted - When sending back to phone - unencrypted
Nick
Автору вопроса Его нужно не в консоль а в переменную
ну так переменная доступна в колбеке. Если не хочется колбеков то используем async/await
Артем
Всем привет db.collection.aggregate([{$skip: x}, {$merge: '...'}]) Можно ли быть уверенным, что $skip в агрегации всегда будет пропускать один и тот же набор документов, от запроса к запросу. Без использования $sort и с одинаковым x? Потестил локально, скипались одни и теже данные, но вдруг мне просто повезло
Anonymous
Всем привет db.collection.aggregate([{$skip: x}, {$merge: '...'}]) Можно ли быть уверенным, что $skip в агрегации всегда будет пропускать один и тот же набор документов, от запроса к запросу. Без использования $sort и с одинаковым x? Потестил локально, скипались одни и теже данные, но вдруг мне просто повезло
Нет, как минимум в процессе репликации может измениться порядок возврата документов. Тут может влиять как расположение документов в датафайле коллекции так и порядок появления записей в индексе по которому идет запрос.
Anonymous
Еще update может привести к переиспользованию ранее высвобожденного места в датафайле и изменить позицию документа.
Anonymous
Но на моей практике проблема появилась именно когда переключились на другую реплику, тут то и выяснилось, что код полагается на порядок возврата документов без сортировки.
Артем
Спасибо, наглядно)
Maxim Kasakin 17_seventeen
Привет всем, давно читаю и возник вопрос, в чем преимущество aggregate? Пока не сталкивался с необходимостью его применять
Anonymous
Привет всем, давно читаю и возник вопрос, в чем преимущество aggregate? Пока не сталкивался с необходимостью его применять
Ну aggregate позволяет произвести обработку данных на стороне субд. Например это будет эффективнее получения 100гб документов по сети для группировки по полю на стороне приложения.
Denis
Привет всем, давно читаю и возник вопрос, в чем преимущество aggregate? Пока не сталкивался с необходимостью его применять
Так же ко всем вышеописанным вкусностям можно добавить $lookup агрегацию, которая позволяет получить аналог join
Андрей
Привет всем, давно читаю и возник вопрос, в чем преимущество aggregate? Пока не сталкивался с необходимостью его применять
Пожалуй, самый мощный инструмент в коллекции mongodb. В документации есть примеры.
Denis 災 nobody
есть какая-то команда, посмотреть что репликасет синхронизирован? Не на таймеры смотреть, а типа bool
inqfen
rs.status()
Maxx
Привет всем Немного оффтопный вопрос: Как можно назвать "моковые" данные, которые приходят с сервера? Т.е. есть тестовая база, заполнена данными для теста, как это можно обозвать корректно?
Maxx
Пока писал, понял, что можно так и обозвать как "тестовые данные"...
Denis 災 nobody
rs.status()
это как раз случай "смотреть на цифры". Так-то удобнее будет rs.printSlaveReplicationInfo()
inqfen
Который integer выражается
Denis 災 nobody
когда кластер собрали, но одна из нод ещё не догнала (нужен случай, когда обновляем все ноды в кластере и нельзя больше 1 за раз обновить), то все будут примари-секондари, но время будет ненулевым
Denis 災 nobody
руками несложно, но нужно автоматизировать
RapidCodeLab
Пока писал, понял, что можно так и обозвать как "тестовые данные"...
demo, sample datasets на английском это зовут, а на русском сам придумай)