Alexander
Но это всё очень плохо пахнет.
Anonymous
Alexander
Anonymous
Nikita
ребят, а как определить, массив с инвайтами хранить внутри сущности, к которым они относятся, или в отдельной коллекции ?)
MⅨ
добрый как искать с использованием шарда
yopp
yopp
yopp
yopp
find, aggregate
yopp
Бонусные баллы за шард ключ в условиях запроса
yopp
MⅨ
alex
alex
alex
не слева... то есть из массива входного вычесть то, что в базе есть и вернуть входной массив обратно
yopp
А, тьфу. Понял. Не из базы достать того что нет, а отфильтровать того что нет в базе.
alex
дада
yopp
Тогда да, $in и отрезать на клиенте
alex
угу... ну лан, думал может можно за одну операцию на базе это сделать
alex
думал через $lookup + match по size
alex
но это как-то геморно
yopp
$lookup тут не нужен. Вы можете попробовать сделать $match по $in, сгруппировать в один массив и потом в $project сделать $setdiffirence
alex
мм... не, не подойдет
yopp
Вам возможно потребуется $let чтоб передать весь список
alex
не буду мучать, спасибо в любом случае
yopp
alex
сейчас проверю...
alex
Почему?
работает :) спасибо) вопрос нужен ли $project перед группировкой ?
alex
yopp
yopp
у вас по hash есть индекс?
yopp
умеет. попробуйте оставить hash: 1, _id: 0 и посмотреть на explain с executionStats чтоб убедится что оно по документам не сканирует
alex
alex
alex
да IXSCAN, я думаю запрос выполнялся бы гораздо дольше если не индекс
alex
спасибо )
yopp
и ещё рассмотрите возможность хеши хранить в двоичном представлении
yopp
у вас они у вас там в десятки байт и вероятно конвертировав из hex в bin и храня их как Binary вы можете на 45% размер сократить
alex
потом будет не удобно в консоли писать запросы...
alex
кстати замерил скорость выполнения, в монге аггрегейт в два раза дольше чем find/$in и вычитание сетов в рантайме в питоне...
yopp
это какие порядки?
alex
0.011 сек против 0.0052
yopp
не заморачивайтесь даже
alex
ок) спасибо за помощь
yopp
11 мс против 5 мс даже нет смысла более точно сравнивать
yopp
у вас запрос получается в два раза больше, потому что дважды дублируются данные. так что разница может быть обусловлена исключительно сетевой задержкой :)
alex
на тестовой тачке база прямо на ней стоит, думаю просто из-за большего запроса, может через $let было бы быстрее, но как вы и сказали, нет смысла копать дальше
Askhat
Ребят, подскажите. Развернул бд на одном сервере и есть Mongo Atlas M20 (реплика 3 ноды)
Обе базы идентичны. Делаю один и тот же запрос. На первом сервере в 10 раз быстрее происходит обработка чем на втором (которая реплика)
Почему так?
yopp
10 раз это в каких порядках?
Askhat
На первом сервере за 72 мс, на реплике 973 мс
yopp
сеть, индексы, производительность
yopp
может быть, да
yopp
простой способ понять сеть или производительность это сделать explain с executionStats
Askhat
А бэк во франкфурте. Он обращается до реплики
yopp
будет видно сколько реально выполнялся запрос
Askhat
Никита
Serhii
Ребята, использую mongoose, после сохранения номера в базу, к телефону добавляется phone.0, как избавится от 0, хранить как строку? Или есть какие-то надстройки для mongoose
Askhat
Serhii
Покажите схему
А что ее показывать, тип Number у поля телефон, почему оно добавляет точку с ноликом когда пишет в базу и как это можно пофиксить, сейчас я решил эту проблему записывая телефон как строку, но интересно было бы узнать как это фиксится
Ilya
ну а какой смысл телефон хранить числом вы с ним будете делать арифметические операции? сомневаюсь, упорядочивание в крайнем случае и по строке нормально работает.
Askhat
Serhii
Мне без разницы как хранить, интересно услышать почему происходит с числом такая хрень, спасибо за фидбек
Nick
Nick
Значит это дабл
Nick
Проверьте тип поля
Ilya
народ правильно ли я понимаю, что если мне надо по координате найти документы в которые она попадает в поле с GeoJSON объектом типа polygon мне надо составлять запрос через оператор $geoIntersects ?
Типа
{
location: {
$geoIntersects: {
$geometry: {
"type": "Point",
"coordinates": [
60.508182808, 56.79992601
]
}
}
}
}
то есть искать пересечние точки и полигона?
Ilya
просто ничего более подходящего не нашел
yopp
Ilya
спасибо
Anonymous
Для разработки использовал бесплатную песочницу MongoDB Atlas. В целом она меня всем устраивает, данных не ожидается много и даже бесплатного тарифа хватило бы с головой, однако бэкапы доступны только для платных тарифов (минимум $9). Так вот вопрос: стоит ли заморачиваться и развертывать свою БД под продакшн в таком случае? В деньгах особой выгоды не будет (деньги не космические), а вот головной боли, боюсь, прибавится (в основном связанной с администрированием).
Anonymous
Можешь попробовать какое-то облако