𝕬𝖗𝖙𝖊𝖒
Вопрос такого плана, я создал док {"id": id,"bal":"0"}. Дальше с помощью кода ниже хочу вывести само значение bal.
for abc in coll.find({"id": id}, {"_id": 0, "bal": 1}):
print(abc)#принтует {"bal":"0"}
print(abc['bal'])
Мне кидает AttributeError: "dict" object has no attribute "bal". Работаю на питоне. Также можете на js пояснить.
Dmitriy
Max
Привет!
Подскажите, пожалуйста, какой сюда лучше индекс для этой квери?
`
const session = await Sessions.findOne({
userId,
}).sort({
createdAt: -1,
});
`
Один составной:
Sessions.index({userId: 1, createdAt: -1} )
Или два разных?
yopp
yopp
тестируйте на своём датасете
yopp
и что?
yopp
yopp
в принципе составной индекс должен быть более эффективным чем пересечение индексов, но это _гипотеза_, которая зависит от фактической селективности индексов
yopp
то что у вас там objectid и дата это ничего абсолютно не значит, потому что это не говорит о фактической частоте значений в документах
Max
ок, буду проьовать
Max
спасиб
yopp
Max
Max
можно на пальцах?
yopp
количество совпадающий ключей в индексах
yopp
т.е. насколько индекс селективный
yopp
но я ещё раз повторю: вам надо взять и протестировать ваши гипотезы на ваших _реальных_ данных
yopp
и на ваших _реальных_ запросах
yopp
вам надо взять в руки explain и ваш датасет
yopp
если у вас есть данные надо не рассуждать, а проверять. это самый эффективный способ
𝕬𝖗𝖙𝖊𝖒
𝕬𝖗𝖙𝖊𝖒
𝕬𝖗𝖙𝖊𝖒
Nick
Так кто знает что делать?
Проверьте тип возвращаемого объекта, скорее всего вы пытаетесь работать с курсором вместо дока
𝕬𝖗𝖙𝖊𝖒
Nick
𝕬𝖗𝖙𝖊𝖒
coll.insert({"id": id, "bal": "0", "invite_people": "0", "username": username})
Вот такой вот строкой создавал подобно примеру. Почему возвращает курсор, а не док?
Nick
Nick
Чтобы получить док из базы, то используйте find и опять же в соответвии с докой по вашему драйверу начинайте с ним работать
𝕬𝖗𝖙𝖊𝖒
Vladislav
Всем привет! Ребята, есть такая задача. В коллекции users есть документы такого рода:
{
"_id" : ObjectId("5d78edf6c58fa231cca1eec6"),
"visitCount" : 2,
"purchases" : [
{
"title" : "smartphone Samsung",
"price" : 120,
"bought" : ISODate("2019-09-13T09:44:00Z")
},
{
"title" : "smartphone iPhone",
"price" : 200,
"bought" : ISODate("2019-09-08T09:44:00Z")
}
],
"views" : [
{
"page" : "index.html",
"time" : ISODate("2019-09-13T09:44:00Z")
},
{
"page" : "smarthpones.html",
"time" : ISODate("2019-09-09T09:44:00Z")
},
{
"page" : "about.html",
"time" : ISODate("2019-09-08T09:44:00Z")
}
]
}
И с помощью Aggregation pipeline нужно выбрать таких (хотя бы их айдишники), которые удовлетворяют следующему условию: (СРЕДНЯЯ сумма покупок price из коллекции purchase в диапазоне между 9 и 14 сентября не больше 120 руб) И (
(Количество просмотров из коллекции views в диапазоне дат между 9 и 14 сентября не больше 3). Я хочу подсчитать эти показатели изначально с помощью стадии $addFields. Основная сложность возникла, связанная с поиском средней суммы покупок purchase за определенный диапазон.
Если обычную сумму покупок за опр. диапазон посчитать получилось:
$addFields: {
purchaseSum: {
$reduce: {
input: "$purchases",
initialValue: 0,
in: {
$add : [
"$$value",
{ $cond: {
if: { $gte: [ "$$this.bought", ISODate('2019-09-11')] },
then: "$$this.price",
else: 0
}}
]
}
}
}
}
},
Вопрос: Как вместо purchaseSum вычислить СРЕДНЕЕ арифметическое за диапазон в данном случае?
yopp
Всем привет! Ребята, есть такая задача. В коллекции users есть документы такого рода:
{
"_id" : ObjectId("5d78edf6c58fa231cca1eec6"),
"visitCount" : 2,
"purchases" : [
{
"title" : "smartphone Samsung",
"price" : 120,
"bought" : ISODate("2019-09-13T09:44:00Z")
},
{
"title" : "smartphone iPhone",
"price" : 200,
"bought" : ISODate("2019-09-08T09:44:00Z")
}
],
"views" : [
{
"page" : "index.html",
"time" : ISODate("2019-09-13T09:44:00Z")
},
{
"page" : "smarthpones.html",
"time" : ISODate("2019-09-09T09:44:00Z")
},
{
"page" : "about.html",
"time" : ISODate("2019-09-08T09:44:00Z")
}
]
}
И с помощью Aggregation pipeline нужно выбрать таких (хотя бы их айдишники), которые удовлетворяют следующему условию: (СРЕДНЯЯ сумма покупок price из коллекции purchase в диапазоне между 9 и 14 сентября не больше 120 руб) И (
(Количество просмотров из коллекции views в диапазоне дат между 9 и 14 сентября не больше 3). Я хочу подсчитать эти показатели изначально с помощью стадии $addFields. Основная сложность возникла, связанная с поиском средней суммы покупок purchase за определенный диапазон.
Если обычную сумму покупок за опр. диапазон посчитать получилось:
$addFields: {
purchaseSum: {
$reduce: {
input: "$purchases",
initialValue: 0,
in: {
$add : [
"$$value",
{ $cond: {
if: { $gte: [ "$$this.bought", ISODate('2019-09-11')] },
then: "$$this.price",
else: 0
}}
]
}
}
}
}
},
Вопрос: Как вместо purchaseSum вычислить СРЕДНЕЕ арифметическое за диапазон в данном случае?
первым шагом посчитать сумму и количество суммируемых элементов, а вторым поделить сумму на количество
yopp
зачем
yopp
сделайте сначала чтоб работало
yopp
make it work, make it right, make it scale
yopp
в таком порядке
yopp
если есть желание оптимизировать количество буковок, то сливайте его в игру в код-гольф
Vladislav
сделайте сначала чтоб работало
Просто мне на Golang билдер надо будет написать, который будет по куче подобных вложенных условий должен билдить этот aggregation pipeline. А как по мне, у golang под MongoDB API слишком "многословное" 😃. Поэтому количество потенциальных буковок хочется ограничить) Ну, ладно)
yopp
время на поиск вариантов оптимизации буковок будет на несколько порядков больше чем время на стучание по клавиатуре чтоб набить существующее количество буковок
yopp
Vlad🍁
Кто может помочь? Почему эта команда иногда выдает результат, а иногда нет?
Dmitry
Vlad🍁
С этим понял, поменял местами
Vlad🍁
Вроде работает
Vlad🍁
Спасибо)
Dmitry
Всем привет, не могу подключиться к mLab, ошибка авторизации?
Dmitry
Dmitry
ну и собственно keys.js:
module.exports = {
mongoURI: "mongodb://username:qwerty@ds016118.mlab.com:16118/hghg»,
secretOrKey: "secret",
};
Anonymous
MⅨ
А кто-то пробовал менять конфигурацию в рантайме в самом приложении. Допустим под экспрессом?
Daniil
MⅨ
Ну допустим mongoDB Api access url
MⅨ
для MongoDB клиента
Гена
Подскажите пожалуйста, у нас монга в конфигу выставлено cacheSizeGB: 12 а ест он почти 40гб оперативы
Гена
в чем может быть дело
yopp
На остальные структуры это никак не влияет
Гена
то есть просто много запросов пошло?
yopp
Да, например большие агрегации или множество сортировок в памяти.
yopp
Какая версия?
Гена
4.0.4
yopp
Транзакции используются?
Гена
конечно
yopp
Тогда ещё снепшоты wt
Гена
понял) спасибо
Dmitry
Парни, правильно я понимаю, что в файле server.js строчка
app.use('/api/items', items);
а именно «/api/items» указывает на коллекцию «items», если речь идет о бесплатной БД от mLab ?
Dmitry
Dmitry
То есть если коллекция называется «profiles» то и путь будет «/api/profiles» верно?
Alexander
Всем привет!
Скажите, процесс Mongod - многонитиевый?
Если посадить один mongod (как участника replica set) на 16-ядерную машину и нагрузить хорошенько запросами, мы имеем шанс увидеть высокую степень утилизации CPU?