Anatoly
db.collection.aggregate([
{
"$match": {
$or: [
{
questionId: 1,
answerIndex: 1
},
{
questionId: 2,
answerIndex: 0
}
]
}
},
{
$group: {
_id: {
userId: "$userId"
},
count: {
$sum: 1
}
}
}
])
Anatoly
👌
Tonylook
👌
i'm very grateful to you tovarish
Nemo
Хай народ а как мне вывести дату в формате 2020:10.30 ну или похоже а не как на скрине
Nemo
при historyPay = historyPay.map((elem) => {
return `${elem.money}р Дата ${elem.created_at}`
})
Vladimir
Dr
https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/
Nemo
Denis
Dr
Согласен, выглядит не лучшим вариантом, но увы, вот так.
Обычно кодом проще всего.
Nemo
Dr
"fomatted" 😉
Nemo
правда сортировка по дате(самые свежые сверху) не прокатывает. в инете находил такого вида запрос
Nemo
типа сорт по айди)
Dr
Почему не прокатывает? Должно, покажи запрос
Dr
HistoryScheme.find({user_id: usrId}).sort({"created_at": -1})
Dr
Как-то так
yopp
из которой я хочу перенести документы? нет
в которую я хочу скопировать - добавляются
тогда пагинация по _id, по этому ключу есть индекс и вы можете использовать пагинацию по маркерам:
- получаете последний _id первого батча: last_id = $project: {_id: 1}, $sort : {_id: 1}, $skip: (<batch_size> - 1), $limit: 1
- мержите первый батч c условием: $match: { _id: $gte MinKey, $lte: <last_id>, $sort: {_id: 1}
а дальше в цикле
– получаете последний _id следующего батча: next_id = $project: {_id: 1}, $match: { $gt: <last_id>}, $sort : {_id: 1}, $skip: (<batch_size> - 1), $limit: 1
- мержите батч: $match: { _id: $gt: <last_id>, $lte: <next_id>, $sort: {_id: 1}
- last_id = next_id
yopp
а, aggregate в covered query так и не научился
Viktar
Подскажите, монга умеет использовать несколько индексов в запросах?
yopp
тогда через find: find({}, {_id: 1}).sort({_id: 1})
Viktar
У меня как не кручу, всегда один в плане фигурирует
yopp
пересечение индексов в целом не очень эффективная операция, если пересекаются большие множества. планировщик в оценке размеров множеств консервативаен
yopp
в таких случая compound index более эффективное решение
Viktar
yopp
вы можете ещё попробовать сбросить кеш планов и сделать hint планировщику на эти индексы
yopp
но если заранее известно что множества большие, то compound
Viktar
Множества большие. У меня саамаая большая проблема с местом. База большая и индексы тоже большие. Вот приходится изголяться.
Cosmic Ranger
приветствую
я сделал одно из полей
someid: {
ref: “someCollection”,
type: mongoose.ObjectId,
required: true,
},
потом делаю из него populate в нужных случаях
но теперь не могу по нему делать find, что делать?
no
no
Cosmic Ranger
наверное потому что это теперь не текст, а реф
Cosmic Ranger
но я его не превращаю populateом в объект, так что это просто айди и искать по нему кажется должна быть возможность
no
Cosmic Ranger
как по обычному полю find({someid: ‘’}). если не делать поле рефом, то ищет нормально
Cosmic Ranger
неужели нужно делать ещё одно поле чисто для текста, а это будет типа ссылкой
Anatoly
Cosmic Ranger
я использовал Schema.Types.ObjectId(id) и это не работало
yopp
а не важно какой тип у _id
Антон
тогда пагинация по _id, по этому ключу есть индекс и вы можете использовать пагинацию по маркерам:
- получаете последний _id первого батча: last_id = $project: {_id: 1}, $sort : {_id: 1}, $skip: (<batch_size> - 1), $limit: 1
- мержите первый батч c условием: $match: { _id: $gte MinKey, $lte: <last_id>, $sort: {_id: 1}
а дальше в цикле
– получаете последний _id следующего батча: next_id = $project: {_id: 1}, $match: { $gt: <last_id>}, $sort : {_id: 1}, $skip: (<batch_size> - 1), $limit: 1
- мержите батч: $match: { _id: $gt: <last_id>, $lte: <next_id>, $sort: {_id: 1}
- last_id = next_id
Скип не могу использовать, потому что тогда запросы очень медленно выполняются
https://stackoverflow.com/a/50267128
yopp
yopp
это итерация по _id
yopp
это _очень_ быстро
yopp
потому что план запроса: найти $gt, идти по дереву в натуральном порядке до $lte
yopp
или до $limit
yopp
весь смысл в том, что вы указываете с какого _id начинать отсчёт, а значит вам когда вы делает $skip не нужно проходить по n=skip ключам индекса, при условии что $skip с каждым запросом увеличивается
yopp
при условии что у вас коллекция стабильная или есть гарантия того, что _id возрастающий, это очень быстры способ пагинации
Антон
yopp
в принципе, наверное что-то можно сколхозить чтоб дальше $skip не делать, но там covered query и это супербыстро
yopp
(covered query, когда ответ на запрос использует только индекс и не делает fetch из коллекции)
yopp
к тому что в неё ничего не записывается и не удаляется, а если записывается то _id новых документов больше чем _id старых
yopp
с удаляются в принципе можно жить
Антон
Понял, спасибо большое
yopp
👍
Ilshat
@dd_bb спамер спамит (Martha)
Cosmic Ranger
Ilyas
Всем привет. Можете подсказать, имеет ли смысл создавать индекс для boolean типа? Я просто нуб в database
Viktar
Viktar
В таком случае имеет
Гена
Всем привет
Никак через URI не могу передать сертификаты:
Гена
Подскажите что не так делаю
Гена
вот так вот работает
mongo "mongodb://admin:admin@mngdb01:11100/?authSource=admin" --tls --tlsCertificateKeyFile=/ssl/mongodb.pem --tlsCAFile /ssl/ca.pem
Гена
Гена
&tlsCAFile=%2Fssl%2Fca.pem&tlsCertificateKeyFile=%2Fssl%2Fmongodb.pem
Dr
Одинарные кавычки используйте
Dr
И ещё CAfile обычно плохая привычка передавать, монго умеет из системного ca-bundle брать
Гена
Гена
может надо что то экранировать ? путь к сертам?
Dr
А добавьте ещё --verbose
Гена
А добавьте ещё --verbose
вот так
mongo "mongodb://admin:admin@mngdb01:11100/?authSource=admin&ssl=true&tlsCertificateKeyFile=/ssl/client-all.pem&tlsCAFile=/ssl/ca.pem --verbose" ?