Aleksey
это спамер
yopp
А я его уже сразу
Aleksey
@dd_bb забань Антон это бот
yopp
Пусть напишет
yopp
Тогда забаню и зарепортю спам
yopp
Динамические имена коллекций и при миграции строго переливать в другую коллекцию. Переключая на новую коллекцию после прогона через миграцию.
yopp
Ну. Храните в одной коллекции номер текущей версии. И все миграции от первой до текущей версии таскаете с собой из версии в версию
Andrey Ponomarenko
ребята, подскажите пожалуйста что я делаю не так
Andrey Ponomarenko
почему у меня создается в бд petya, но не создается vasya? Я заметил что vasya.save не пашет - callback внутри petya.save выводит 'saved **', а callback внутри vasya.save не выводит ничего, я по фану делал там внутри throw new Error - тож не сработала. обьект vasya создается, а вот vasya.save не пашет((
Andrey Ponomarenko
Andrey Ponomarenko
о! работает! мне там в одном чатике дали совет такой же. но возник вопрос - я делал все по туториалу
Andrey Ponomarenko
а там вот так
Andrey Ponomarenko
почему им disconnect не мешает?
Roman
всем привет
Roman
подскажите в моднге можно как-то апдейтом округлить значения?
yopp
что значит округлить?
Roman
например
есть поле data.metrics.x
Roman
оно float
Roman
а нужно округлить до ближайшего целого
Roman
db.getCollection('test').update(
{
"data.metrics.x": { $exists: true }
},
{
$set : {
"data.metrics.x": Math.round("data.metrics.x"),
}
},
{
"multi" : true,
"upsert" : false
}
);
Roman
так вот
Roman
не получается
Roman
только вникаю в монгу, пробовал в лоб по аналогии с мускулем
Roman
не проканало :)
yopp
А кто тебе сказал что твой js должен в запросе канать?
yopp
https://docs.mongodb.com/manual/crud/
Roman
да вот никто и не говорил
yopp
Вот начни с изучения этого полезного раздела документации
yopp
а потом вот этого: https://docs.mongodb.com/manual/reference/operator/update-field/
Roman
ага понял
Roman
спасибо
Roman
получается оклуглить можно вот так
Roman
db.getCollection('test').find(
{"data.metrics.x": { $exists: true }}
).forEach(function(item){
db.getCollection('test').update(
{ _id: item["_id"] },
{ $set: {
"data.metrics.x": Math.round(item["data"]["metrics"]["x"])
}
}
)
});
Roman
я в нужну сторону мыслю? :)
Anonymous
Roman
тогда как?
Roman
округлить значение
Anonymous
сначала какая версия mongod?
Roman
3.2
Roman
3.2.7
Roman
полностью
Nick
$ceil посмотри
Roman
уже смотрел
Roman
только я не могу понять как мне его к моей задачи то притулить
Anonymous
В MongoDB нет $round можно использовать Aggregation Framework чтобы это делать и обновить документов используя bulkwrite
Anonymous
http://www.kamsky.org/stupid-tricks-with-mongodb/rounding-numbers-in-aggregation-framework
Roman
ага, спасибо за наводу :)
Anonymous
но если тебе просто нужно убрать дробная часть тогда $trunc
Roman
я понял, спасибо
Roman
пойду изучать мат. часть Aggregation Framework-а :)
Anonymous
конечно можно тоже использовать mapReduce
Roman
а вот возвращяясь к моему варианту
Roman
в чем там ошибка
Roman
вроде заботает
Roman
или идеологически не правильный подход?
Roman
вот в этом варианте
Roman
db.getCollection('test').find(
{"data.metrics.x": { $exists: true }}
).forEach(function(item){
db.getCollection('test').update(
{ _id: item["_id"] },
{ $set: {
"data.metrics.x": Math.round(item["data"]["metrics"]["x"])
}
}
)
});
Sergei
Есть несколько типов документов (5 видов). Для примера возьму 3 случая
{"price" : {"current": 51.99 }, "source": "a1" }
{"product" : {"price": 21.99 }, "source": "a2" }
{"ADP" : {"price": 133.99 }, "source": "a3" }
Мне нужно допустим получить среднюю цену для каждого source, для этого я хочу брать цену из одного поля. Как мне сделать $project полей "$price.current", "$product.price", "$ADP.price" в одно с названием "$price"?
Mogodb версии 3.0.14
yopp
Sergei
Запрос сейчас такой
db.products.aggregate([
{
"$match": {timestamp: {$ne:null}}
},
{
"$project": {
_id:0,
source: 1,
timestamp: 1,
"price": выбрать из ["$product.price", "$price.current"...,. ..]
}
},
{
"$group": {
"_id": {
"source": "$source",
"datetime": {"$dateToString": {
"format": "%Y-%m-%d",
"date": {
"$add": [
new Date(0),
{ "$multiply": [1000, "$timestamp"] }
]
}
}
}
},
"average price": {$avg: "$price"}
}
}
])
yopp
День тыканья лицом в доку! https://docs.mongodb.com/manual/reference/operator/aggregation/cond/#exp._S_cond
yopp
Я не уверен что есть другие варианты на самом деле :)
Sergei
вот так вот получилось и не работает
yopp
nmae
yopp
тьфу
yopp
запрос невалидный
Sergei
запрос валидный
yopp
нет
yopp
точнее как, синтаксически — да. логически — нет
Sergei
он переименовывает только одно поле $product.price в $price
yopp
мне кажется посчитать сумму и количество вхождений по каждому из нужных полей и потом посчитать среднее будет проще и быстрее чем городить такой проджекшен
yopp
более того, я не уврен как себя будет вести монга без явного сравнения в условии
yopp
так что идея if: "$foo" мне не нравится совершенно
yopp
либо три проджекшена подряд сделать ¯\_(ツ)_/¯
Sergei
"price": { $ifNull: ["$product.price", {$ifNull: ["$price.current", {$ifNull: ["$ADP.price", "$model.displayPrice.price.value"]}]}]}
yopp
а в 3.0 ifnull есть?
Sergei
есть