mongodb shell命令行添加字段,并且转换Date数据成Double类型添加到新字段上

q
qimoe
发布于 9 个月前

MongoDB 4.0以上版本包含一个$toDouble()表达式,该表达式会将数字值(decimal, int, long, boolean, date, string)转换为double类型。MongoDB 4.0中的聚合框架(aggregation)不能用于更新文档(除非您想要创建一个新集合或使用$out来替换现有集合),因此您将必须运行一个聚合查询来转换值,然后分别应用文档更新:

// Find matching documents
var docs = db.collection.aggregate([
    { $match: {
        test: { $exists: true }
    }},

    // Add a new field converting the date to a double
    // (alternatively, the original "test" value could also be replaced)
    { $addFields: {
        testDouble: { $toDouble: "$test" }
    }}
])

// Update with the changes (Note: this could be a bulk update for efficiency)
docs.forEach(function (doc) {
     db.collection.update({ _id: doc._id}, {$set: { testDouble: doc.testDouble }});
});

// Check the results
> db.collection.find().limit(1)
{
    "_id" : ObjectId("5d1a202e476381c30cd995a4"),
    "test" : NumberDecimal("0.1"),
    "testDouble" : 0.1
}

MongoDB 4.2(当前在新版本中)增加了对使用某些聚合阶段进行更新的支持,因此在4.2中,以上更新可以更简洁地表示为:

db.collection.updateMany(
    { test: { $exists: true }},
    [ { $addFields: { testDouble: { $toDouble: "$test" }}}]
)

相关文章推荐
评论区
暂未开放
相关文章推荐