Nick
или используйте версии доков самостоятельно, что по сути тоже самое
Daler
session.startTransaction();
db.Products.find()
Долгая калькуляция
db.Products.update()
session.startTransaction();
db.Products.find()
Долгая калькуляция
db.Products.update()
session.startTransaction();
db.Products.find()
Долгая калькуляция
db.Products.update()
session.startTransaction();
db.Products.find()
Долгая калькуляция
db.Products.update()
Daler
Nick
будут они в потоках или нет не имеет значения
Daler
во всех find значение будет одинаковым?
Daler
допустим количество продукта 2
Daler
все транзакции получат продукт с количеством в 2?
Nick
все транзакции получат продукт с количеством в 2?
да, ведь он же не поменялся и не залочился. Хотите получить все кроме залоченного - нужно запдейтить или выставить флаг или версию инкрементнуть и указать это в выборке. Локов на чтение как в мускуле в монге нет
Nick
select for update вроде как под капотом так же делает, маркирует строку как если бы она апдейтилась в транзакции
Daler
session.startTransaction();
db.Products.findAndModify(query: {условие}, update: { $inc: { __v: 1 } },)
Долгая калькуляция
db.Products.update()
Daler
Алишер Абдуллаев
привет. советуюсь.
у заказов есть from_date равен iso date
мне нужно найти все заказы у которых месяц в from_date равен c 0-11.
то есть, конечный результат -> в январе (месяц 0) равен n заказов, в феврале (месяц 1) равен n заказов.
Maksim
Привет, всем.
Помогите советом как сделать правильно
Я с моногой особо плотно ранее не работал.
Есть монга стоит на сервере, на сервере 6 рейд размер базы 1 тер.
в этом сервере вылетел один диск, из за этого нагрузка на остальные диски выросла в разы
Остановить запись в базу можно не более чем на пару часов, но диски в сервере по 10 тер.
Решили на момент замены дисков и ребилда рейда сервер вывести из работы.
Для сохранения данных, и продолжения записи в базу решили поднять реплику.
Подскажите как правильно это сделать.
Могу ли я поднять еще одну монгу аналогичной версии, и настроить типо мастер слейв реплику ?
Я точнее уже поднял еще одну ноду для реплики, и небольшой сервер под арбитра
Вопрос
Можно теперь в текущую ногу где есть все данные, добавить чистую монгу не заливая туда дамп
~timur~
Здравствуйте, у меня в бд есть документы {"key": "текст1"} и так далее, можно ли сделать поиск по строке типа "текст1 ... ...", чтобы как бы в той строке по которой я ищу документ в начале была часть ключа, а потом еще какие-то слова?
Maksim
Чтоб она скопировала все туда, а после полной синхроннизации (да как ее проверить) потушить праймери ноду и переключить все на секондари (чтоб она стала праймери)
Maksim
или нужно все остановить, сделать дамп, собрать реплику, туда залить дамп и только после продолжать запись в реплику
~timur~
Andrey
Привет, всем.
Помогите советом как сделать правильно
Я с моногой особо плотно ранее не работал.
Есть монга стоит на сервере, на сервере 6 рейд размер базы 1 тер.
в этом сервере вылетел один диск, из за этого нагрузка на остальные диски выросла в разы
Остановить запись в базу можно не более чем на пару часов, но диски в сервере по 10 тер.
Решили на момент замены дисков и ребилда рейда сервер вывести из работы.
Для сохранения данных, и продолжения записи в базу решили поднять реплику.
Подскажите как правильно это сделать.
Могу ли я поднять еще одну монгу аналогичной версии, и настроить типо мастер слейв реплику ?
Я точнее уже поднял еще одну ноду для реплики, и небольшой сервер под арбитра
Вопрос
Можно теперь в текущую ногу где есть все данные, добавить чистую монгу не заливая туда дамп
Самый жеский, но! Рабочий метод - остановить монгу на 1 сервере, подключить внешний ssd на 2 тера например по usb3, скопировать всю db - путь в конфиге монги прописан, на этот ssd, займет где-то около 1 часа, залить директорию на другой сервер, еще чуть более часа, если диски быстрые(если медленные- то долго) и на этом сервере установить докер и скачать образ монги той же версии! Обязательно поменять права и владельца на все файлы на новом сервере, чтоб монга в контенере подцепила. Стартовать контейнер с пробросом директории и конфига. Итого на внешний диск чуть более 1 часа, на новый сервер при таком способе нще столько же + 10 мин на образ провервку работы. Делал такое пару раз.
Andrey
Утром такое просто сегодня проворачивал, standalone версия и база 1.1 тера
Andrey
Потом обратно также, естественно, данные которые идут в базу - я останавливал процесс, и потом вознобновлял.
Andrey
С репликами за 2 часа сомневаюсь, что будет успех.
Andrey
Maksim
Я понял, тема с репликой плохая
Andrey
Andrey
Если был в стандэлоне была бд - то самый быстрый стопить, копировать, на новом та де версия монги. И потом обратно.
Maksim
NCR
Добрый вечер
Есть лимиты на количество коллекций?
NO WAR!
Всем привет.
Только изучаю Монго.
Знаю что по запросу найду в коллекции много документов, а мне нужно будет изменить только 2.
Есть в Монго что-то чтобы ограничить результат фильтрации до необходимого количества документов?
Nick
NO WAR!
Nick
NO WAR!
Валентина
Как я могу спарсить определенные айдишники? Есть какой-то метод в монгоДБ или придется чисто через фильтр реализовывать ? По типу у меня пользователи добавили несколько товаров в желаемое ( сохраняются айдишники в объекте юзера ), мне нужно при переходе в раздел "желаемое" отоброжать эти товары, то есть из объекта Юзера забрать поле желаемое, где хранятся айди товаров, дальше обратится к объекту товаров сравнить их с айдишниками и отобразить нужные
Nick
NO WAR!
𝔏𝔢𝔯𝔬𝔶
свем привет, подскажите пожалуйста имею таблицу tournaments, в ней массив rooms с id комнат, как я могу получить все турнаменты сразу с комнатами?
𝔏𝔢𝔯𝔬𝔶
𝔏𝔢𝔯𝔬𝔶
Nick
агрегация с $lookup, либо если монгус, то populate()
NO WAR!
NO WAR!
El
Подскажите для цены какой тип выбрать?
Alexandrr
El
Number он же не точный
El
Есть decimal
El
El
Tony
Привет, подскажите как правильно составить запрос.
У меня есть некоторые объекты содержащие массив дочерних объектов.
{
"id": 1,
"entityState": 1,
"children": { obj1, obj2, ... }
}
я хочу найти объект по id, entityState и чтобы в массиве дочерних объектов вернулись только те объекты у которых поле entityState равно 1.
Что то не приходит на ум, как это сделать
Nick
Tony
не работает
Tony
выдает все элементы массива
Nick
его в проекцию надо
Nick
find(
{ _id : 3 },
{ files : { $elemMatch : { entityState : 1 } } }
)
Tony
Nick
следите за запятыми и скобками
Nick
find(
query_object,
projection_object
)
Tony
Tony
а, лишние скобки
Tony
ну массив отфильтровался верно, но вот данные самого объекта не вернулись, вернулся только его id и массив с дочерними объектами. Выходит мне прописывать все его поля придется чтобы получить все данные?
Nick
Tony
понял, попробую
Nick
C
dogs: [
{
name: String,
toys: { type: Schema.Types.ObjectId, required: true, ref: "Corps" },
},
},
],
Можно ли имея такой ключ в модели монгуса, как-то сделать так, чтобы запретить сохранение пустого массива? Знаю что такая структура в целом неправильная, но какая есть, сейчас её сменить возможности нет
Nick
dogs: [
{
name: String,
toys: { type: Schema.Types.ObjectId, required: true, ref: "Corps" },
},
},
],
Можно ли имея такой ключ в модели монгуса, как-то сделать так, чтобы запретить сохранение пустого массива? Знаю что такая структура в целом неправильная, но какая есть, сейчас её сменить возможности нет
посмотрите на проверки https://mongoosejs.com/docs/validation.html
Nick
Nick
туда хоть что упихать можно
C
туда хоть что упихать можно
Или я тупой или сани не едут :)
const userSchema = new Schema({
phone: {
type: String,
validate: {
validator: function(v) {
return /\d{3}-\d{3}-\d{4}/.test(v);
},
message: props => `${props.value} is not a valid phone number!`
},
required: [true, 'User phone number required']
}
});
В их примерах у ключа пропсами прописывается валидация и тд. Но я же не могу заменитьусловную стрингу своим объектом вместо type