Within each document, there are two columns representing, respectively and as strings, whole and decimal numbers of price:
{
"prod_id": "1022"
"whole_price": "10",
"decimal_price": "50"
}
...
How could I perform a merge of those two columns, through an aggregation pipeline, and thus correctly represent the price as a float with a value of 10.5, for each pair of documents?
{
"prod_id": "1022"
"complete_price": 10.5
}
...
CodePudding user response:
You can use $toDouble
and $concat
in a $project
stage to get the desired output:
This query output the field complete_price
which is the values concatenated and a "." to create a double value. Then parsed to double to have as a number and not as a string.
db.collection.aggregate([
{
"$project": {
"prod_id": 1,
"complete_price": {
"$toDouble": {
"$concat": [
"$whole_price",
".",
"$decimal_price"
]
}
}
}
}
])
Example here
Edit:
Also, if your data can not be stable you can use $convert
(instead of directly $toDouble
) which has onError
and onNull
like this example