yopp
про $match можно тут почитать: https://docs.mongodb.com/manual/reference/operator/aggregation/match/
Гена
ну это я понял, но мне нужно исключить где ns равно local, пустота и admin
Гена
я смогу несколько $ne навестить?
yopp
$nin
Гена
Точно!
Гена
Спасибо
Гена
а пустоту как null указать?
yopp
зависит от того, что такое «пустота»
Гена
"ns" : "",
Гена
вот такое
yopp
тогда «»
yopp
null != «»
Гена
понял
спасибо большое
Гена
у меня получилось вот так вот
db.getSiblingDB("admin").aggregate( [
{ $currentOp : { allUsers: true} },
{ $match : { ns: {$nin :["local.oplog.rs","","admin.$cmd.aggregate"]}}}
] ).pretty()
Гена
еще вопрос
в выводе есть поле с временем ответа
а можно как-то выставить фильтр больше n времени?
yopp
timeOpenMicros: {$gte: … }
yopp
в $match
Гена
ага
Ща попробую) спасибо
Гена
а можно как то это в милисекундах а не в микросекундах?
Ilya
всем привет:
response = await Task.aggregate([
{
$match: {
project: mongoose.Types.ObjectId(project),
updatedAt: {$gte: new Date(fromDate), $lte: new Date(toDate)},
times: {$ne: []},
}
},
{
$project: {times: true, _id: false}
},
])
приходит ответ:
[{"times":[{"_id":"5f05cd8909372a306415d9ec","user":"5f05c3267d435521802b0d1b","text":"","time":325,"updatedAt":"2020-07-08T13:43:37.100Z","createdAt":"2020-07-08T13:43:37.100Z"},{"_id":"5f05dc596dc16731a84935f3","user":"5f05c3267d435521802b0d1b","text":"коммент","time":260,"updatedAt":"2020-07-08T14:46:49.749Z","createdAt":"2020-07-08T14:46:49.749Z"}]},{"times":[{"_id":"5f0c541f62d8401a44cac0e8","user":"5f05c3267d435521802b0d1b","text":"214124","time":60,"updatedAt":"2020-07-13T12:31:27.959Z","createdAt":"2020-07-13T12:31:27.959Z"}]}]
как можно сделать так чтобы содержимое всех times [] было в одном массиве
только через unwind?
Ilya
и еще вопрос: как убрать вложенность эту?
Ilya
чтобы был просто массив и не было {times: {}}
Ilya
хотя бы подскажите, использовать exec в таком случае норм?)
yopp
всем привет:
response = await Task.aggregate([
{
$match: {
project: mongoose.Types.ObjectId(project),
updatedAt: {$gte: new Date(fromDate), $lte: new Date(toDate)},
times: {$ne: []},
}
},
{
$project: {times: true, _id: false}
},
])
приходит ответ:
[{"times":[{"_id":"5f05cd8909372a306415d9ec","user":"5f05c3267d435521802b0d1b","text":"","time":325,"updatedAt":"2020-07-08T13:43:37.100Z","createdAt":"2020-07-08T13:43:37.100Z"},{"_id":"5f05dc596dc16731a84935f3","user":"5f05c3267d435521802b0d1b","text":"коммент","time":260,"updatedAt":"2020-07-08T14:46:49.749Z","createdAt":"2020-07-08T14:46:49.749Z"}]},{"times":[{"_id":"5f0c541f62d8401a44cac0e8","user":"5f05c3267d435521802b0d1b","text":"214124","time":60,"updatedAt":"2020-07-13T12:31:27.959Z","createdAt":"2020-07-13T12:31:27.959Z"}]}]
как можно сделать так чтобы содержимое всех times [] было в одном массиве
только через unwind?
$map
yopp
Гена
нет
а если отсеивать по secs_running?
Ilya
Гена
А можно как-то искуственно создать долгобещий запрос ?
Ilya
блин, не понимаю, можете хотя бы словами описать в какой последовательности все сделать:
вот есть такого вида коллекция:
[
{
"_id": {
"$oid": "5f0c491854ebcd1a44f994ca"
},
"project": {
"$oid": "5f05c45e1f878c2b6475304c"
},
"times": [
{
"_id": {
"$oid": "5f0c541f62d8401a44cac0e8"
},
"user": {
"$oid": "5f05c3267d435521802b0d1b"
},
"text": "214124",
"time": 60,
"updatedAt": {
"$date": "2020-07-13T12:31:27.959Z"
},
"createdAt": {
"$date": "2020-07-13T12:31:27.959Z"
}
}
],
"createdAt": {
"$date": "2020-07-13T11:44:24.410Z"
},
"updatedAt": {
"$date": "2020-07-13T13:30:21.696Z"
},
"__v": 0
}
]
я хочу выдернуть массив times
при этом я должен отфильтровать массив по id проекта и id user-а (в массиве times)
в какой последовательности я должен это сделать?
Ilya
$replaceRoot помог
Ilya
если кому интересно:)
Ilya
подскажите еще такую вещь:
вот я получил выборку которая мне нужна была, как мне сделать populate в ней например по полю user?
Ilya
для выборки я использовал aggregate
Ilya
lookup не для этого?
Daniil
Но если поддерживает, то также, как и в обычном запросе
Daniil
Если нет, то используйте lookup
Daniil
lookup не для этого?
populate это фича mongoose, по сути своей доп запрос и маппинг по условию
Ilya
понял
Daniil
lookup это уже внутренний инструмент монги
Ilya
а что лучше изначально сделать?
Ilya
aggregate или populate?
Ilya
я нашел решение сделать populate после aggregate в колбэке, но думал что это плохое решение
Ilya
да, спасибо lookup помог)
Андрей
Всем привет, каким образом можно во всей таблице к примеру со значением поля count больше 1 сделать убавление на 1 значение числа в поле count? т.к. где-то может быть число 3, а где-то 2, а мне именно на один ото всех убавить
Ilya
https://docs.mongodb.com/manual/reference/operator/update/inc/
Ilya
только с -1
Ilya
а сначала https://docs.mongodb.com/manual/reference/operator/query/gte/index.html
Андрей
Через updateMany же?
Андрей
Roman
Roman
как мне удалить
Roman
?
Roman
Roman
я пробую так и ничего
Roman
как мне написать exists правильно?
Roman
вот ткая схема
"notification": {
"email": [
"hfghfg@asdasd.com",
"hfghfg@asdasd.com",
"hfghfg@asdasd.com",
"hfghfg@asdasd.com",
"hfghfg@asdasd.com",
"hfghfg@asdasd.com",
"hfghfg@asdasd.com",
"hfghfg@asdasd.com",
"hfghfg@asdasd.com",
"hfghfg@asdasd.com",
"hfghfg@asdasd.com",
"hfghfg@asdasd.com"
],
"phone": []
Roman
await Users.exists({[this.preffix]: { email: _email }});
Roman
не робит :(
Александр
Не могу понять, mongodb - это хороший вариант для хранения категорий неограниченной вложенности? (В такой схеме одно поле указывает на родительскую категорию) Или лучше применить что-то из SQL решений?
Roman
хз я в дб 0
Roman
но монго похоже оч на json
Андрей
Ребят, как выйти из положения, что когда начинает литься трафик и нагрузка вырастает, то при создании новых записей походу время ожидания пересекается или что, хз, но летит ошибка: E11000 duplicate key error index in mongodb mongoose
Андрей
Ну а перед созданием записи естественно проверяю, есть такой айди в базе или нет
Denis
no
Андрей
no
Ошибка на дубликат выскакивает только при сохранении (создании) нового документа
Андрей
да
no
Аа
Андрей
но когда этих ошибок море, это оч не круто
Андрей
такое чувство складывается, что на некоторых запросах долго думает и пытается повторно записать
no
Если выскакивает ошибка на дубликат при создании -- возвращай просто findOne
no
Андрей
ты не понял, я же перед созданием делаю поиск по бд, присутствует в бд уже такой айди или нет, если нет, то создаю, если есть, то выдаю уже готовое
no
Всё равно может случиться race condition и ошибку в любом случае надо ловить и проверять