Nick
Блин, точно забыл самое важное))
Alex
добрый день господа; столкнулся с такой проблемой: Sort operation used more than the maximum 33554432 bytes of RAM; Add an index. Но загвоздка в том, что я не понимаю, по каким полям нужно делать индекс. В запросе find есть $in по одному полю и sort по двум другим полям. Пробовал создавать индекс по разным комбинациям этих трёх полей (одно, два, три), но ошибка лезет всё равно. Важен ли порядок, в котором указываются поля, когда создаёшь индекс?
Nick
agic
куда то не туда )
Alex
Запрос в студию
db.getCollection('facility').find({
"_id": {
"$in": [
"20088ee0-8d1e-4e70-825a-91ee74208915",
"797b729c-b274-41cf-8648-63956db4e546",
"62aaf1bb-dfb5-427e-87a0-b254d78a039e",
... ещё 19 тысяч строк здесь
]
}
}).sort({
"treeDepth": 1,
"supportedTranslatedDisplayNames.en": 1
})
Nick
Nick
И используйте explain для проверки использования индекса
Alex
создал индекс, он появился в winningPlan.inputStage в explain, но падение всё равно происходит
Alex
уменьшил количество строк до 10к, теперь не падает. Осталось теперь только придумать, что со всем этим делать, чтобы работало со всеми 19к строками
✙ Ukraine siegt an allen fronten! 🇺🇦
Привет всем. С монгой работаю не так давно и не так много, поэтому возник следующий вопрос:
В БД SQL сохранять файлы в blob значениях является крайне плохой практикой, по ряду причин, одна из которых - раздутые террабайтные таблицы, и все вытекающие из этого.
Как обстоят дела в Mongo в этом плане? Стоит в ней хранить байт-значения файлов или по-классике сохранять путь к файлу и класть все на сервер?
✙ Ukraine siegt an allen fronten! 🇺🇦
Кто подскажет - заранее благодарю
Alex
можно использовать MongoDB GridFS
Александр
А какой вобще смысл хранить файлы в бд? Что бы их раздать придётся из БД читать, а так их nginx может сразу отдавать
Артур
привет всем, подскажите, в доке имеется два поля order: Number, memoryInt: Number
задача: есть диапазон товаров с order от 100 до 120, поле memoryInt у этих товаров обьем памяти, типа 64, 128, 25, каким образом вначале отфильтровать вначале по order а потом по memoryInt?
sort({order: 1, memoryInt: 1}) - так не пашет
Alex
Viktar
Viktar
Для картинок есть свои системы хранения.
✙ Ukraine siegt an allen fronten! 🇺🇦
Denis
Denis
Denis
Daniil
Roman
ребят как сравнить два массива через монгу
Roman
пока что я делаю updateOne
Roman
и перезаписываю старый массив на новый но это плохо для моей реализации
Roman
очень часто объекты внутри похожи, по этому я озадачился данным вопросом
Denis
а есть какой то индекс на наличие поля? например я хочу повесить индекс на поле url, которое ссылка, но мне не интересен текст этой ссылки, я не хочу забивать оперативу текстами этих ссылок, я по тексту никогда не буду искать, я хочу просто чтобы $exists быстро работал для выборок где url есть или нету
Denis
ребят как сравнить два массива через монгу
find({
yourArr: [{ field1: '1' }, { field2: '2' }]
})
на точное соответствие переданного массива массиву из монги
если надо проверить на вхождение всех переданных элементов (то есть и другим разрешено быть)
find({
yourArr: {
$all: [{ field1: '1' }, { field2: '2' }]
}
})
также если части полей разрешено быть другими, можно заюзать dot notation - 'yourArr.field1'
Roman
Roman
спасибо
Archakov
Добрый день! Как правильно можно реализовать в mongoose систему лайков/дизлайков? Есть комменты и посты и у них есть лайки
Archakov
Правильно ли будет, если для LikeModel я задам { post: ObjectId, comment: ObjectId }, а потом уже уже с помощью populate вытаскивать лайки, типа
PostMode.populate('likes')
при этом в PostModel добавить
likes: [
{
type: Schema.Types.ObjectId,
ref: 'Like',
},
],
Archakov
так и я для комментов
no
Я делал отдельную модель для лайков
no
Были у меня лайки на постах и комментах
no
Archakov
то есть, в item ты контролируешь для какой модели лайк ставится?
Archakov
availableModels хранит массив или что?
no
no
no
https://mongoosejs.com/docs/populate.html#dynamic-ref
Archakov
о! спасибо
Ростислав ✚
Добрый день. Я где-то натупил и не могу понять где. Вот есть схема, почему-то в каждом элементе масива goods создается доп _id
Ростислав ✚
Denis
Serhii
Ростислав ✚
Serhii
Да
Ростислав ✚
Я так понял они там обязательно нужны для монги, и должны быть полюбому?
Serhii
Да. Но перезаписывать нужно осмысленно
Serhii
Archakov
такое вообще реально запилить? чтобы через populate он нашёл все лайки, в которых есть id записи
Daniil
Archakov
храню, но когда задаю populate('likes') свойство становится null
Daniil
Archakov
походу разобрался, спасибо
Archakov
сделал так
.populate({
path: 'likes',
model: 'Like',
select: 'type',
})
s
привет
s
Я пишу приложение на ноде, которое должно трекать изменения на балансах кошельков юзеров. Сейчас есть микросервис с методом, который при вызове просматривает коллекцию кошельков, сравнивая значения баланса с ним же из кешированной версии этой таблицы. И если баланс изменился, то флаг isChecked меняется с false на true. Метод работает, значения в коллекции меняется, но нода видит изменения только при повторном запросе? В чем может быть проблема. Ниже креплю код с комментариями
s
вот сама коллекция, там 20 таких документов
s
допустим я поменял значения баланса у этого юзера, на этом этапе isCheked = false
s
затем я вызываю метод, который показывал выше. Тут isCheked все еще равняется false
s
но в самой базе изменение видно
s
и что бы увидеть его в ноде, нужно вызывать метод еще раз
Shamil | CS
s
ты имеешь ввиду вынести построение схем и коннект к бд в приватные поля?
а в асинхронном создании массива нет смысла, это нужно поправить
Shamil | CS
Более того, каждый раз вызывать на любой коллекции .find() очень снижает performance в лонг-терме, поэтому нужно строить запросы внутри MongoDB (через интерфейс mongoose)
s
я монгусом и пользуюсь
s
но вообще этот метод в продакшене будет отрабатывать раз в 10 минут
s
или в большее время
s
сейчас-то я его в ручную вызываю