MongoDB-正在将嵌套数组中的字符串数据类型更新为数字无效
我试图更新MongoDB嵌套数组数据类型,它更新了NaN值。你能帮帮我吗。谢谢 MongoDB数据: 这是我的MongoDB数据产品QtyDetails集合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",
[{
"_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}}
);
})