Anonymous
Вот такой матч в агрегации получилось добавить`{
names: {$all: ['name1', 'name2']}
}`
Но может быть так, что не задано ни одно имя и нужно значит вернуть документы не учитывая имена. Просто програмно проверять и не добавлять в массив агрегаций такую агрегацию?
Tatiana Belozub
Ребят, помогите пожалуйста. Таска срочная, а я нихрена не шарю в монге. Есть readWrite юзер, мне надо дать ему дополнительные привилегии на шардирование коллекций. Как лучше? Админские привилегии вроде как давать не хотелось бы. Есть чо более гибкое? В какую сторону глянуть?
Dmitriy
Dmitriy
там что то вроде db.getRoles() должны быть роли и список что они умеют
Tatiana Belozub
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
Спасибо, попробую
Tatiana Belozub
Denis 災 nobody
нужно обновить машины в кластере, если я новым машинам выдам старые домены, надо какие-то действия делать или оно само автоматом в кластер вгонит? Разумеется, с правкой конфигов под ключ итд. rs.add и всё такое нужно или инит сам пройдёт?
Evgeniy
Прривет. Робяты, только начал работать с mongo но уже что-то затык.
Подскажите плз, что я не так с обновлением делаю? Пишет:
MongoError: the update operation document must contain atomic operators
не понял, что это означает(
Удаление работает нормально.
Daniil
Evgeniy
A
Добрый день, подскажите как лучше все бэкапировать монгу? В данный момент снимаем раз в сутки копию с /var/lib/mongodb. Планируем снимать oplog раз в час в течении дня.
inqfen
А mongodump чем не подходит? Я каждый час дамплю
inqfen
Потом за дни кроме последнего бэкапы удаляются, оставляются по 1 на день
A
Бд 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
Roman
У меня есть функция котороя лезит в бд и подсчитывает количество сущностей в общем. Как мне вывести результат только за 1 день?
Kirill
Roman
Roman
yopp
Roman
Daniil
Roman
Daniil
потом соответственно есть возможность работать с ней
Roman
Daniil
тогда используйте его
Roman
Мне нужно вывести за 24 часа результат с базы. Как мне его использовать, я имею введу с чем сравнивать?
Roman
> db.users.find({lastLoginDate: {$in: [new Date() - 1, new Date()] }}).pretty()
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' } ]
}
нужно чтобы в коментах юзеры лукапились
Roman
Daniil
Вам нужно передать в качестве значений две даты, с разницей в сутки
Daniil
Тогда запрос будет работать корректно
Roman
вот документ с полем "lastLoginDate" : ISODate("2020-05-15T09:19:20.948Z"),
он не попал
Roman
а сейчвс ISODate("2020-05-15T11:27:25.996Z")
Roman
Daniil
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
Roman
> console.log(new Date(1589542930178))
Roman
Так переводит
Roman
Roman
@d_lebedinsky почему из кода так не работает?
Евгений
Cheslav
всем привет, можете подсказать как правильно создать выделенные модели?
Vova
Кто-нибудь случайно знает как сделать запрос в mongodb с двумя текстовыми полями, но разным collation?
yopp
Cheslav
Cheslav
меня только на это хватило)
Roman
Подскажите. У меня есть такая задача. Например человек занимается спортом каждый день определенное количество времени и таких спортсменов несколько. И эти данные записываются в бд (сколько времени он поканимался). Я хочу вывести результат за день. С чем мне сверять период времени 1 день?
Например есть поля lastlogindate и firstlogindate это время когда он зарегестрировался