Anonymous
Вот такой матч в агрегации получилось добавить`{ names: {$all: ['name1', 'name2']} }` Но может быть так, что не задано ни одно имя и нужно значит вернуть документы не учитывая имена. Просто програмно проверять и не добавлять в массив агрегаций такую агрегацию?
Tatiana Belozub
Ребят, помогите пожалуйста. Таска срочная, а я нихрена не шарю в монге. Есть readWrite юзер, мне надо дать ему дополнительные привилегии на шардирование коллекций. Как лучше? Админские привилегии вроде как давать не хотелось бы. Есть чо более гибкое? В какую сторону глянуть?
Dmitriy
там что то вроде db.getRoles() должны быть роли и список что они умеют
Tatiana Belozub
там что то вроде db.getRoles() должны быть роли и список что они умеют
Ааааа... чот такое уже видела. я прост первый день с монгой, первый час я б сказала, сижу доку ковыряю) посмотрю детальнее на getRoles, спасибо. Сорян за нубские вопросы 😂
Dmitriy
@tyantatian use <dbname> db.getUsers() - смотрим есть ли юзер в списке и что у него за роли проставлены. Роли есть кастомные, есть стандартные. db.getRoles() / db.getRole(<roleName>) - смотри что по этой роли есть в поле actions. Если вообще всё пусто - создай роль с необходимыми экшенами и проапдейть юзера. Если есть уже нужный набор с шардингом (а вдруг) проапдейть юзера
Dmitriy
https://docs.mongodb.com/manual/reference/method/db.createUser/#db.createUser https://docs.mongodb.com/manual/reference/method/db.createRole/#db.createRole
Dmitriy
я думаю если здесь полазить, будет понятней
Dmitriy
Поправочка. Там экшоны в привелегиях.
Anonymous
Можно ли как-то сделать супер долгие запросы, чтобы проверить работает ли асинхронность в моем приложении?
Arams
setTimeout
Arams
module.exports.getAll = async function (req, res) { try { const categories = await Category.find({ user: req.user.id }) setTimeout(() =>{ res.status(200).json(categories); }, 1000) } catch (e) { errorHandler(res, e); } }
Anonymous
Спасибо, попробую
Denis 災 nobody
нужно обновить машины в кластере, если я новым машинам выдам старые домены, надо какие-то действия делать или оно само автоматом в кластер вгонит? Разумеется, с правкой конфигов под ключ итд. rs.add и всё такое нужно или инит сам пройдёт?
Evgeniy
Прривет. Робяты, только начал работать с mongo но уже что-то затык. Подскажите плз, что я не так с обновлением делаю? Пишет: MongoError: the update operation document must contain atomic operators не понял, что это означает( Удаление работает нормально.
Evgeniy
Чтобы обновить поле в документе используйте оператор $set
Благодарствую. Смотрел инфу по старой версии ноды 😬
A
Добрый день, подскажите как лучше все бэкапировать монгу? В данный момент снимаем раз в сутки копию с /var/lib/mongodb. Планируем снимать oplog раз в час в течении дня.
inqfen
А mongodump чем не подходит? Я каждый час дамплю
inqfen
Потом за дни кроме последнего бэкапы удаляются, оставляются по 1 на день
A
Бд 30 с лишним гигов
Bogdan
Бд 30 с лишним гигов
Сколько по времени занимает весь процесс на 30 гиг бекапа?
A
11 минут
Arams
день добрый. ребят есть две коллекции первая BookCategories { "_id" : ObjectId("5ebe03018adb0e0475335050"), "catName" : "HISTORY", "comment" : "", "__v" : 0 } вторая shelvings { "_id" : ObjectId("5ebe03398adb0e0475335052"), "name" : "TEST", "catName" : ObjectId("5ebe03018adb0e0475335050"), "__v" : 0 } использую $lookup но видимо что то не так делаю { $lookup:{ from: 'bookcategories', localField: 'catName', foreignField: '_id', as: 'test' } } возращает пустой массив. а мне нужно вернуть данные в которых будет имя категории и не ее айди { "_id" : ObjectId("5ebe03398adb0e0475335052"), "name" : "TEST", "catName" : HISTORY, <- вот тут "__v" : 0 }
yopp
Добрый день, подскажите как лучше все бэкапировать монгу? В данный момент снимаем раз в сутки копию с /var/lib/mongodb. Планируем снимать oplog раз в час в течении дня.
Вместо оплога можете снимать снепшоты файловой системы, при условии что у вас включён журнал и весь dbPath на одном логическом разделе
Roman
У меня есть функция котороя лезит в бд и подсчитывает количество сущностей в общем. Как мне вывести результат только за 1 день?
Roman
Сделать поле с датой и делать выборку по дате?
За 24 часа. Динамически я имею введу
Roman
Сделать поле с датой и делать выборку по дате?
Какой метод для выборки по дате есть в монге?
Kirill
Какой метод для выборки по дате есть в монге?
Ну я не ходячий вики, не помню наизусть. Гугл поможет)
Daniil
Какой метод для выборки по дате есть в монге?
обычный find с $gte и $lte применяемые к полю с датой создания документа
yopp
Ну я не ходячий вики, не помню наизусть. Гугл поможет)
В нашей группе не принято посылать в Гугл.
Daniil
Как получить дату создания документа?
при создании записывать ее туда
Daniil
Куда записывать?
в документ, например в поле createdAt
Daniil
потом соответственно есть возможность работать с ней
Roman
в документ, например в поле createdAt
У меня есть в документе такое поле
Daniil
тогда используйте его
Roman
Мне нужно вывести за 24 часа результат с базы. Как мне его использовать, я имею введу с чем сравнивать?
Roman
> db.users.find({lastLoginDate: {$in: [new Date() - 1, new Date()] }}).pretty()
Roman
тогда используйте его
Это правильный запрос?
Daniil
нет
Daniil
db.users.find({ lastLoginDate: { $gte: new Date() - 1, $lte: new Date() } }).pretty()
Daniil
Только насчет new Date() - 1 я не знаю что будет результатом этого выражения
Daniil
но это к монге уже не относится
Roman
А new Date () eсть в монге?
Denis
как можно сделать lookup в массиве свойства? post { comments: [ { user: 'ref' }, { user: 'ref' } ] } нужно чтобы в коментах юзеры лукапились
Daniil
Вам нужно передать в качестве значений две даты, с разницей в сутки
Daniil
Тогда запрос будет работать корректно
Roman
вот документ с полем "lastLoginDate" : ISODate("2020-05-15T09:19:20.948Z"), он не попал
Roman
а сейчвс ISODate("2020-05-15T11:27:25.996Z")
Roman
db.users.find({ lastLoginDate: { $gte: new Date() - 1, $lte: new Date() } }).pretty()
Так вот же две даты с разницей в сутки
Daniil
Так вот же две даты с разницей в сутки
вот именно, что не в сутки
Roman
вот именно, что не в сутки
Как не сутки? Сегодня и вчера?
Roman
new Date () и new Date() - 1
Daniil
Welcome to Node.js v12.16.1. Type ".help" for more information. > const test = new Date(); undefined > console.log(test - 1, test.getTime()) 1589542602893 1589542602894 undefined >
Daniil
разница в одну миллисекунду
Daniil
вы неправильно работаете с датой
Daniil
если вы хотите получить сутки назад, так и вычитайте сутки (в миллисекундах), т.е. 24 * 60 * 60 * 1000, а не единицу
Roman
Все равно не работает
Roman
Если отнимать то оно переводится в число, а в базе формат Date. Может в этом проблема?
Daniil
И в этом тоже. Сформируйте две нужные даты, переведите их в ISO string, а потом уже используйте в консоли
Roman
> console.log(new Date(1589542930178))
Roman
Так переводит
Roman
Roman
@d_lebedinsky почему из кода так не работает?
Евгений
@d_lebedinsky почему из кода так не работает?
typescript надо явно привести к числу.
Cheslav
всем привет, можете подсказать как правильно создать выделенные модели?
Vova
Кто-нибудь случайно знает как сделать запрос в mongodb с двумя текстовыми полями, но разным collation?
yopp
всем привет, можете подсказать как правильно создать выделенные модели?
На выбор: https://docs.mongodb.com/manual/tutorial/model-embedded-one-to-many-relationships-between-documents/ https://docs.mongodb.com/manual/tutorial/model-referenced-one-to-many-relationships-between-documents/
Cheslav
меня только на это хватило)
Roman
Подскажите. У меня есть такая задача. Например человек занимается спортом каждый день определенное количество времени и таких спортсменов несколько. И эти данные записываются в бд (сколько времени он поканимался). Я хочу вывести результат за день. С чем мне сверять период времени 1 день? Например есть поля lastlogindate и firstlogindate это время когда он зарегестрировался