Аза
Всем привет, поскажите, пожалуйста, как выбрать по диапозону дать, но учитвать только год и месяц? Составил такой запрос, но он включает и дату
{
"date": {
$gte: ISODate("2020-01-01T00:00:00.000Z"),
$lt: ISODate("2020-06-30T00:00:00.000Z")
}
}
Гена
@dd_bb
Daniil
Аза
Ilya
всем привет
type: {type: Schema.Types.ObjectId, ref: TypeModel},
как в схеме можно указать что в значении будет либо objectId либо пусто ('')?
Eduard
всем привет, подскажите плиз как в монго можно зашифровать столбец, и искать по нему LIKE поиском
Eduard
везде пишут, что стало доступна технология с 4.2 FLE, а вот как пошаго настроить ее, хз
yopp
yopp
Eduard
ок, я уже нашел статью. Правильно ли я понимаю, что тут всего 3 драйвера это поддерживают и на php я это не реализую?
yopp
Afair, на рынке сейчас есть только Arca от Cossack Labs которая умеет более-менее в searchable encryption, и то, я не уверен что оно поддерживает LIKE запросы
yopp
Eduard
ооо, спасибо большое
Eduard
а я уже на питоне мучаюсь
yopp
https://docs.mongodb.com/manual/reference/security-client-side-query-aggregation-support/#supported-query-operators
yopp
yopp
Я в принципе знаю только о Arca от Cassack Lab, которая умеет в searchable encryption, с кучей ограничений
Eduard
а вот так разве не сработает? db.users.find({name: /a/}) //like '%a%'
yopp
нет
yopp
поля шифруются на клиенте, на сервер передаётся зашифрованная BinData
Eduard
блин мне нужно в общем id и фио, фио зашифрованным хранить. Сначала попробовал на тарантуле циклом на луа по всей таблице проходить, расшифровывать и искать подстроку. такой цикл на луа на моих данных 2 сек работает, но при нагрузке вырастает до 11,5
yopp
сервер не имеет доступа к ключам шифрования, вы не можете искать по полям
Eduard
блин, ну т.е я могу всю коллекцию достать расшифрованную и циклом пробежаться и найти
yopp
вероятно
yopp
вы можете посмотреть на Arca, она умеет в PG/My SQL
yopp
https://www.cossacklabs.com/acra/
yopp
но searchable encryption это enterprise feature. а лицензия стоит от $5k в год
yopp
ещё когда-то был mylar (https://css.csail.mit.edu/mylar/), но что-то про него ничего не слышно
Eduard
а что такое mongocryptd? У меня возникает ошибка "connec
tion closed calling ismaster on 'localhost:27020'" я так понимаю нужно его поставить отдельно?
Eduard
вообще не понимаю, почему порт вдруг становится 27020, когда монго на 27017
Андрей
В монгусе лишние поля не отдавать, это делается populate? Что то не получается.
Андрей
Андрей
Захар
так и должно быть, что в алфавитном порядке, а не как я добавлял?
Захар
у меня data, add, sum должно быть
Daniil
Daniil
И не нужен он
Захар
ну программа как работала так и работает, а вот глазу непривычно
Daniil
Порядок ключей в объекте не имеет значения, это же не массив
Igor
А подскажите такую вещь, есть у меня mongoose и там модельки. БД уже существует. Вот добавляю я в Scheme поле. к примеру active c параметрами типа
active: {
type: Boolean,
default: true,
},
И соответственно на новых это поле есть, на старых записях нет. Есть какой-то способ mongoose отдавать поле active для старых записей тоже в значении default. Или проще пробежаться по всем записям и обновить их?
Daniil
Igor
Anonymous
Добрый вечер! Как можно этот запрос написать без применения подзапроса?
SELECT COUNT(*) FROM org_type_on_related_genre WHERE genre_id = :deletedGenreId and org_type_id IN (SELECT org_type_id FROM org_type_on_related_genre GROUP BY org_type_id HAVING count(*) > 1
нужно получить количество строк, в которых genre_id равен искомому id и при этом org_type_id этой строчки в данной таблице не уникален
твой братишка
добрый вечер.
есть один вопрос по mongodb. кто знает как решить, подскажите, пожалуйста:
есть пачка данных. сгребаю их в список. чутка правлю. затем хочу залить обновленный список словарей(то есть именно обновить старые записи).
data = [{‘bar’: ‘foo’}, …]
update_many(filter={}, update=data) - не работает(
update_many(filter={}, update={'$set': i for i in data}) - перезаписывает только последнюю запись в списке
(дело происходит в python. AsyncIOMotorClient)
Александр
твой братишка
Александр
Это будет один запрос
Daniil
Daniil
Bulkwrite это сетевая оптимизация и не более
Daniil
Внутри запросы будут выполняться по очереди
Александр
Всё равно быстрее чем по одному)
Daniil
Daniil
Захар
как получить последнюю запись без получения всех записей?
твой братишка
@d_lebedinsky @a1exo
спасибо вам большое за помощь.
а то я обкурил весь стековерфло, гугл. думал, может со мной что не так)
Daniil
Вам это все на клиент не приедет, а произойдёт на уровне базы
Daniil
И вернётся уже 1 документ
Daniil
Не забываем только про ограниченный объём памяти, доступный для сортировки, нужны индексы
Захар
вот у меня этим заполнена бд
по сути надо получить последний объект по максимальной date
Daniil
Вам нужен индекс { date: -1 }
Daniil
И делайте выборку выше указанным методом
Daniil
Кстати, если это какой-то частый запрос в каком то контексте (например последнее сообщение в чате), то имеет смысл хранить последнюю запись в связанном объекте (в примере нужно хранить последнее сообщение в документе чата)
Daniil
Daniil
Потом это же нужно использовать для сортировки
Daniil
Посмотрите как создавать индексы и как использовать сортировку
Захар
я окончательно запутался
Захар
мне не уперлась эта сортировка
Захар
просто получить последнюю запись по дате
Daniil
Nick
Дмитрий
Товарищи подскажите пожалуйста
Как мне сначала составить запрос а потом его выполнить?
Например у меня есть роут, который принимает доп параметры, и взаивисмости от параметров мне нужно добавить к запросу populate
Например:
let roles = await Role.find({});
if (params.permissions) {
roles.populate('roles');
}
типо такого
Daniil