yopp
1гб это в худшем случае минут 15
yopp
Переберите последовательно и обновите каждую по одной
Semeon
Чат! Подскажите пожалуйста, почему округление не срабатывает? Никак не могу понять.
// Получить заданное время от текущей даты в MS
const timeRange = (ms = 0) => Math.round(new Date().getTime() / 1000) + 10800 - ms;
// Получить средние значения за неделю от текущего времени (GET)
exports.dailyAverages = function(cb) {
db.get().collection(config.collectionConnect).aggregate([
// Сортировка записей по времени
{ $match: { Date: { $gte: timeRange(604800), $lt: timeRange() }}},
// Агрегация найденных записей
{ $group:
{
_id: null,
LastTimeUpdate: { $max: "$Date" },
Temperature: { $avg: "$Temperature" },
Pressure: { $avg: "$Pressure" }
}
},
{ $project:
{
_id: null,
Temperature: { $round: ["$Temperature", 2] },
Pressure: { $round: ["$Pressure", 2] }
}
},
// Удаление лишних полей из объекта
{ $project: { _id: 0, Date: 0, City: 0, Street: 0 }}
]).next(function(err, doc) {
cb(err, doc);
});
};
Nick
Чат! Подскажите пожалуйста, почему округление не срабатывает? Никак не могу понять.
// Получить заданное время от текущей даты в MS
const timeRange = (ms = 0) => Math.round(new Date().getTime() / 1000) + 10800 - ms;
// Получить средние значения за неделю от текущего времени (GET)
exports.dailyAverages = function(cb) {
db.get().collection(config.collectionConnect).aggregate([
// Сортировка записей по времени
{ $match: { Date: { $gte: timeRange(604800), $lt: timeRange() }}},
// Агрегация найденных записей
{ $group:
{
_id: null,
LastTimeUpdate: { $max: "$Date" },
Temperature: { $avg: "$Temperature" },
Pressure: { $avg: "$Pressure" }
}
},
{ $project:
{
_id: null,
Temperature: { $round: ["$Temperature", 2] },
Pressure: { $round: ["$Pressure", 2] }
}
},
// Удаление лишних полей из объекта
{ $project: { _id: 0, Date: 0, City: 0, Street: 0 }}
]).next(function(err, doc) {
cb(err, doc);
});
};
в чем заключается "не срабатываение"?
Semeon
Semeon
а ошибка монги какая?
errmsg:
"Invalid $project :: caused by :: FieldPath field names may not start with '$'.",
code: 16410,
Nick
Semeon
Nick
v4.0.4
раунд добавили только в 4.2
Semeon
лол кек
Semeon
спасибо
Semeon
перед установкой новой версии старую надо сносить или можно сверху накатить?
Semeon
На Debian кто-нибуд сталкивался с проблемой обновления «Монги» до более новой?
W: The repository 'http://repo.mongodb.com/apt/debian stretch/mongodb-org/4.2 Release' does not have a Release file.
N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
N: See apt-secure(8) manpage for repository creation and user configuration details.
E: Failed to fetch http://repo.mongodb.com/apt/debian/dists/stretch/mongodb-org/4.2/main/binary-amd64/Packages 404 Not Found [IP: 99.86.8.179 80]
E: Some index files failed to download. They have been ignored, or old ones used instead.
Nick
Nick
версия дебиана?
Semeon
Semeon
Debian GNU/Linux 9
Nick
тогда только могу посоветоваться пройтись по доке установки что выше скинул
Semeon
Да, я так и сделал
Semeon
И после этого пришёл сюда )
Nick
)))
Nick
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/#using-tgz-tarballs
Nick
попробуйтте, может получится
Semeon
спасибо!
Alexander
Попробуй скачать готовый docker-контейнер, может оно так проще будет.
Semeon
Я не умею с докером обращаться ))
Alexander
Semeon
(
Semeon
ну, на маке у себя обновил до 4.2
Semeon
))
Semeon
иии... запрос сработал
Semeon
Чат! Большое вам спасибо за помощь! Запрос у меня заработал. Он получился вот таким:
// Получить заданное время от текущей даты в MS
const timeRange = (ms = 0) => Math.round(new Date().getTime() / 1000) + 10800 - ms;
// Получить средние значения за неделю от текущего времени (GET)
exports.dailyAverages = function(cb) {
db.get().collection(config.collectionConnect).aggregate([
// Сортировка записей по времени
{ $match:
{
Date: { $gte: timeRange(604800), $lt: timeRange() }
}
},
// Агрегация найденных записей
// и вычисление средних значений
{ $group:
{
_id: null,
LastTimeUpdate: { $max: "$Date" },
Temperature: { $avg: "$Temperature" },
Pressure: { $avg: "$Pressure" }
}
},
// Округление средних значений
{ $project:
{
_id: null,
LastTimeUpdate: 1,
Temperature: { $round: ["$Temperature", 1] },
Pressure: { $round: ["$Pressure", 1] }
}
},
// Удаление лишних полей из объекта
{ $project:
{
_id: 0,
Date: 0,
City: 0,
Street: 0
}
}
]).next(function(err, doc) {
cb(err, doc);
});
};
Подскажите пожалуйста, можно ещё что-нибудь в нём поправить / оптимизировать?
Denis
Чат! Большое вам спасибо за помощь! Запрос у меня заработал. Он получился вот таким:
// Получить заданное время от текущей даты в MS
const timeRange = (ms = 0) => Math.round(new Date().getTime() / 1000) + 10800 - ms;
// Получить средние значения за неделю от текущего времени (GET)
exports.dailyAverages = function(cb) {
db.get().collection(config.collectionConnect).aggregate([
// Сортировка записей по времени
{ $match:
{
Date: { $gte: timeRange(604800), $lt: timeRange() }
}
},
// Агрегация найденных записей
// и вычисление средних значений
{ $group:
{
_id: null,
LastTimeUpdate: { $max: "$Date" },
Temperature: { $avg: "$Temperature" },
Pressure: { $avg: "$Pressure" }
}
},
// Округление средних значений
{ $project:
{
_id: null,
LastTimeUpdate: 1,
Temperature: { $round: ["$Temperature", 1] },
Pressure: { $round: ["$Pressure", 1] }
}
},
// Удаление лишних полей из объекта
{ $project:
{
_id: 0,
Date: 0,
City: 0,
Street: 0
}
}
]).next(function(err, doc) {
cb(err, doc);
});
};
Подскажите пожалуйста, можно ещё что-нибудь в нём поправить / оптимизировать?
Например убрать юзлесс комменты каждые 2 строки, и юзать промисы/асинк-авайт вместо колбеков
Semeon
Nick
Semeon
Чат! У меня два концептуальных вопроса:
1. У меня в одном объекте есть значение Date, а в другом LastTimeUpdate. Оба возвращают timestamp. Логично ли переименовать Date в Time?
2. Я написал функцию, которая возвращает timestamp сразу в Московском времени — это норм или не очень? Я думал о том, чтобы она возвращала timestamp в UTC и на клиенте делать поправку на Московское время. Подскажите, как правильнее будет?
Egor
Semeon
Egor
делай как тебе удобнее все-равно, но где-то посередке
Сергей
Ребят, привет. Подскажите, как при обновлении SUnion
Атоматически посчитать размер массива во вложенной схеме?
Сергей
Сергей
Сергей
а как обращение к определенному элементу массива сделать?
Nick
Сергей
Nick
да
Сергей
да
TypeError: Cannot read property 'length' of undefined
Nick
Проверьте тип гоалс
yopp
Сергей
Nick
Josh
тип [] должен точно создаваться и быть пустым в монге
yopp
members.reduce(f(member, acc) { member.goals ... }]
Josh
странно, так-то (this.members && this.members.length) || 0
Josh
yopp
Да это на второй строчке, в members.goals проблема
yopp
Гугл сказал arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
yopp
А, да
yopp
Ну лан
yopp
Дока у жс отвратительная(
Сергей
Сергей
Josh
а, у него 2 вложенности
Сергей
Nick
Josh
goals_all обычно total_goals как-нибудь обзывают
this.data.membersCount = this.members.length
this.members.data.totalGoals = this.members.reduce((sum, member) => sum + member.goals.length)
Сергей
Сергей
Пробую вот так
Но работает не так как мне нужно
Должно срабатывать при каждой записи
Но срабатывает только при создании союза(
Сергей
Сергей
Josh
зачем под сумму отдельно вложенный объект заводить – хз, да и в виртуале это можно было бы сделать
SUnion.virtual('membersCount').get(function () {
return this.members.count
})
SMember.virtual('totalGoals').get(function () {
return this.goals.count
})