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
я в нужну сторону мыслю? :)
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
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
Roman
Ну кроме того что это всё на клиенте крутится, никаких проблем нет
ага, вот теперь понятно, получается что клиент получает все документы и потмо делает по 1му апдейту, что не есть кошерно
yopp
Я не уверен что есть другие варианты на самом деле :)
Sergei
День тыканья лицом в доку! https://docs.mongodb.com/manual/reference/operator/aggregation/cond/#exp._S_cond
я правильно делаю? "price": { $cond: { if: "$product.price", then: "$product.price", else: { if: "$model.displayPrice.price.value", then: "$model.displayPrice.price.value", else: { if: "$price.current", then: "$price.current", else: "$ADP.price" } } } }
Sergei
вот так вот получилось и не работает
yopp
вот так вот получилось и не работает
как минимум потому что у тебя невалидный json/bson
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
есть