[MongoDB] Query to Get Documents with nth Decimal Places and Update with mth Decimal Place Values
As an application of how to get the number of decimal places in JavaScript, I wrote a query in MongoDB to get documents with 3rd decimal places and beyond and update them to 2nd decimal places.
var skus = db.skus.find(
{
$or: [
{
$where: function() {
var numbers = String(this.price).split('.');
var result = 0;
if (numbers[1]) {
result = numbers[1].length;
}
// Check if it has 3rd decimal places or more
return result > 2;
}
},
{
$where: function() {
var numbers = String(this.salePrice).split('.');
var result = 0;
if (numbers[1]) {
result = numbers[1].length;
}
return result > 2;
}
}
]
}
).toArray();
// Converter to convert to 2nd decimal place values
var converter = function(num) {
return parseFloat(num.toFixed(2));
};
skus.forEach(function(s){
if (s.price) {
s.price = converter(s.price);
}
if (s.salePrice) {
s.salePrice = converter(s.salePrice);
}
// printjsononeline(s);
var ret = db.skus.save(s);
printjsononeline(ret);
print('');
});
The key point is the $where: function() { } part that determines whether price or salePrice has 3rd decimal places or more.
Using the $where operator, you can often achieve complex conditional queries by leveraging JavaScript programming, so please try using $where.
That’s all from the Gemba.