Nick
если по какойто причине у вас больше двух коллекций задействовано в выборке - то стоит думать над изменением структуры бд
Daniyar
const ArrivalSchema = new Schema({ product: { type: Schema.Types.ObjectId, required: [true, 'Продукция должна быть указана'], ref: 'Product' }, branch: { type: Schema.Types.ObjectId, required: [true, 'Филиал нахождения продукции должен быть указан'], ref: 'Branch' }, color: { type: Schema.Types.ObjectId, required: [true, 'Цвет продукции должен быть указан'], ref: 'Color' }, quantity: { type: Number, required: [true, 'Количество прибывшей продукции должен быть указан'], min: [0, 'Количество не может быть меньше 0'] }, buyPrice: { type: Number, min: [0, 'Приобретенная цена не может быть отрицательной'] }, sellPrice: { type: Number, min: [0, 'Продажная цена не может быть отрицательной'] }, minSellPrice: { type: Number, min: [0, 'Минимальная продажная цена не может быть отрицательной'] }, discount: { type: Number, default: 0, min: [0, 'Акционная скидка не может быть меньше 0'] }, comment: { type: String, maxlength: [1000, 'Длина комментария должна быть меньше 1000 символов'] }, arrivedAt: { type: Date, required: [true, 'Дата прибытия продукции должна быть указана'] }, readyForSell: { type: Boolean, default: false } }, { timestamps: true });
Daniyar
const ArrivalSchema = new Schema({ product: { type: Schema.Types.ObjectId, required: [true, 'Продукция должна быть указана'], ref: 'Product' }, branch: { type: Schema.Types.ObjectId, required: [true, 'Филиал нахождения продукции должен быть указан'], ref: 'Branch' }, color: { type: Schema.Types.ObjectId, required: [true, 'Цвет продукции должен быть указан'], ref: 'Color' }, quantity: { type: Number, required: [true, 'Количество прибывшей продукции должен быть указан'], min: [0, 'Количество не может быть меньше 0'] }, buyPrice: { type: Number, min: [0, 'Приобретенная цена не может быть отрицательной'] }, sellPrice: { type: Number, min: [0, 'Продажная цена не может быть отрицательной'] }, minSellPrice: { type: Number, min: [0, 'Минимальная продажная цена не может быть отрицательной'] }, discount: { type: Number, default: 0, min: [0, 'Акционная скидка не может быть меньше 0'] }, comment: { type: String, maxlength: [1000, 'Длина комментария должна быть меньше 1000 символов'] }, arrivedAt: { type: Date, required: [true, 'Дата прибытия продукции должна быть указана'] }, readyForSell: { type: Boolean, default: false } }, { timestamps: true });
делаю query по property branch и color
Daniyar
как поступить?
Daniyar
делаю query по property branch и color
и product.. в нем тоже есть ссылки
Nick
а зачем?
Nick
почему вы реляционку перекладываете на жсон?
Daniyar
а зачем?
для поиска..
Daniyar
что за реляционка?
Nick
что за реляционка?
плоская структура
Daniyar
так что надо делать? со схемой проблема?
Nick
у вас зачемто цвет ссылкой указан а не значением
Daniyar
ну цвет.. тоже отдельная схема
Nick
зачем?
Nick
что это вам дает
Daniyar
для отдельного использования
Nick
в монге нет констрейнтов, поэтому удаление цвета поломает вам консистентность
Daniyar
для удаления есть чеккер
Daniyar
если он используется его нельзя удалить
Nick
вообще если хотите удобно выбирать данные, то надо менять структуру и вносить данные внурь вашей структуры
Илья
mongorestore -d db --gzip staging пытаюсь подключить дамп базы из 3т 2020-05-27T13:17:20.590+0300 don't know what to do with file "staging/workflows.json", skipping... получаю ошибку на каждый файл. что я делаю не так ? база должна автоматически создаваться при этой команде или надо её как-то инициализровать ?
Илья
пробовал без —gzip тоже
Илья
тут делал mogoexport
Daniyar
в монге нет констрейнтов, поэтому удаление цвета поломает вам консистентность
смотрите Ник... допустим один и тот же цвет будет использоваться в нескольких доках.. как здесь сделать?
Daniyar
по-любому отдельная схема нужна же? нет?
Илья
надо mongoimport
а ключи какие для команды ?
Nick
а ключи какие для команды ?
https://docs.mongodb.com/manual/reference/program/mongoimport/
Илья
или просто папку указать ?
Илья
открыл уже)
Daniyar
{ color: "red" }
а в реде есть code(hex), alt
Nick
а в реде есть code(hex), alt
а вы когда выборку делаете что вы в цветах ищете? по id? или как
Nick
и что там?
Daniyar
но для этого я и добавил в parent colorTitle
Daniyar
автоматом при создании
Nick
что там пишется? название цвета или еще чтото
Daniyar
по сути да... ключевое значение по которому будет происходить поиск
Nick
вот вы его и должны указывать в качестве ссылки на цвет, а не id
Daniyar
в смысле... вместо object id могу дать какой-то стринг?
Nick
да
Daniyar
да
не знал... надо посмотретб
Nick
и тогда вы в выборке можете указывать ваш title
Nick
а populate уже использовать потом на выбранных доках
Nick
и по аналогии с бренчем и продуктом
Nick
хотя с продуктом не факт что так поулчится
Slava
а кто-нибудь шарит как $count вынести в отдельное поле, а остальные результаты в другое?
короче вот как я решил проблему: все агрегации что были, я засунул в facet: { data: aggregations } а после facet’а с помощью replaceRoot, я разделил данные на 2 части: - totalLength - $size: ‘data’ - data - $slice[‘$data’, limit] и на выходе все работает шикарно
Илья
https://docs.mongodb.com/manual/reference/program/mongoimport/
так и не понял как сделать правильно, у меня папка с json коллекциями получилась на экспорте mongoimport -db staging/ 2020-05-27T13:28:08.360+0300 no collection specified 2020-05-27T13:28:08.360+0300 using filename 'staging' as collection 2020-05-27T13:28:08.395+0300 connected to: mongodb://localhost/ 2020-05-27T13:28:08.398+0300 Failed: error processing document #1: read staging/: is a directory 2020-05-27T13:28:08.399+0300 0 document(s) imported successfully. 0 document(s) failed to import.
Илья
мне говорили что вообще можно в папку с монго перетащить её и заработает бд когда сервис запустится, это так ?
Sebastian
Привет всем, кто-нибудь связывал mongodb с telegram?
Sebastian
Я хочу получать данные mongoDB в телеграмме
Viktar
Напишите бота, который будет смотреть в базу и присылать вам в телеграм
Sebastian
кто-то сделал это и это работает?
Daniil
кто-то сделал это и это работает?
Отчасти это любой statefull самописный бот использующий в качестве базы монгу
Sebastian
webhook
Daniil
webhook
Сформулируйте задачу более конкретно, в чем у вас проблема?
Sebastian
на самом деле лучше указать, что я хочу сделать
Sebastian
У меня есть база данных mongoDB, и я хочу получать телеграмму каждый раз, когда появляются новые данные
Daniyar
используйте telegraf js
Daniyar
на сервере стартуете бот
Daniyar
и просто bot.sendMessage после создания дока
Sebastian
так что, если я могу это сделать
Sebastian
сделайте)
Это хорошая идея, выполнимо или нет?
Sebastian
Спасибо за ответы
Daniyar
поизучайте telegraf js... там вполне адекватная документация
Sebastian
Я думал, что телеграф JS был не так
Sebastian
215/5000 webhook - вы передаете свой URL на сервер Telegram, а когда приходит новое сообщение - вам будет отправлено сообщение опрос - каждые n секунд вы делаете запрос на сервер, и он отвечает вам доступными данными.
Sebastian
Я думал, что это были способы
Daniyar
вы только усложняете себе задачу
Daniil
только запись
Daniil
поэтому polling/webhook вам не нужны