MongoDB-正在将嵌套数组中的字符串数据类型更新为数字无效

MongoDB-正在将嵌套数组中的字符串数据类型更新为数字无效,mongodb,mongoose,mongodb-query,mongodb-update,Mongodb,Mongoose,Mongodb Query,Mongodb Update,我试图更新MongoDB嵌套数组数据类型,它更新了NaN值。你能帮帮我吗。谢谢 MongoDB数据: 这是我的MongoDB数据产品QtyDetails集合 [{ "_id" : ObjectId("5d31567ea23d120f087a9ab1"), "productId" : ObjectId("5d31567ea23d120f087a9aaf"), "sizes" : [ { "name" : "4",

我试图更新MongoDB嵌套数组数据类型,它更新了NaN值。你能帮帮我吗。谢谢

MongoDB数据: 这是我的MongoDB数据产品QtyDetails集合

[{
    "_id" : ObjectId("5d31567ea23d120f087a9ab1"),
    "productId" : ObjectId("5d31567ea23d120f087a9aaf"),
    "sizes" : [ 
        {
            "name" : "4",
            "qty" : 3.0,
            "price" : "1500.0"
        }, 
        {
            "name" : "5",
            "qty" : 6.0,
            "price" : "1600.0"
        }, 
        {
            "name" : "6",
            "qty" : 7.0,
            "price" : "1700.0"
        }
    ]
}
....
]
Mongo Shell脚本: 更新的MongoDB数据: 在运行脚本之后。我得到了价格:NaN,它是更新的

[{
    "_id" : ObjectId("5d31567ea23d120f087a9ab1"),
    "productId" : ObjectId("5d31567ea23d120f087a9aaf"),
    "sizes" : [ 
        {
            "name" : "4",
            "qty" : 3.0,
            "price" : NaN
        }, 
        {
            "name" : "5",
            "qty" : 6.0,
            "price" : NaN
        }, 
        {
            "name" : "6",
            "qty" : 7.0,
            "price" : NaN //need to update "price" : 1700.0
        }
    ]
}
...
]

首先,parseFloat是一个javascript函数,而不是MongoDB操作符。意味着您可以在脚本中使用它,但不能在MongoDB查询/命令中使用

其次,更新命令不能具有自引用意味着您不能使用同一文档的相同/不同字段更新文档中的字段

简言之,您不能在单个查询中完成此操作。您需要两个查询,第一个用于获取,第二个用于更新

db.productqtydetails.find({_id : ObjectId("5d31567ea23d120f087a9ab1")}).forEach(function(data) {
    var sizes = data.sizes;
    for(var i = 0; i < sizes.length; i++) {
        sizes[i]["price"] = parseFloat(sizes[i]["price"]);
    }

    db.productqtydetails.update(
        {"_id": data._id},
        {"$set": {"sizes": sizes}}
    );
})

是否可以添加架构以获取更多信息?请尝试使用NumberDecimal@vishalpankhaniya我用过mongoshell@Anban我得到了错误:输入不是有效的小数128值。
db.productqtydetails.find({_id : ObjectId("5d31567ea23d120f087a9ab1")}).forEach(function(data) {
    var sizes = data.sizes;
    for(var i = 0; i < sizes.length; i++) {
        sizes[i]["price"] = parseFloat(sizes[i]["price"]);
    }

    db.productqtydetails.update(
        {"_id": data._id},
        {"$set": {"sizes": sizes}}
    );
})