MongoDB - 将嵌套数组中的数据类型从字符串更新为数字不起作用
MongoDB - Updating datatype in nested array for String to Number not working
我尝试更新 MongoDB 嵌套数组数据类型,它更新了 NaN
值。你能帮帮我吗,任何人。谢谢
Mongo数据库数据:
这是我的 MongoDB 数据 productqtydetails
集合。
[{
"_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 脚本:
db.productqtydetails.update({
_id : ObjectId("5d31567ea23d120f087a9ab1")
},
{
$set: {"sizes.$[].price": parseFloat("$sizes.$[].price") //Here I used parseInt(), NumberInt also
}
});
已更新Mongo数据库数据:
在 运行 脚本之后。我收到 price : 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 query/command.
中使用
其次,更新命令不能有自引用(意味着您不能使用同一文档的 same/different 字段更新文档中的字段)。
简而言之,您不能在单个查询中执行此操作。您需要两个查询,第一个是获取,第二个是更新。
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}}
);
})
我尝试更新 MongoDB 嵌套数组数据类型,它更新了 NaN
值。你能帮帮我吗,任何人。谢谢
Mongo数据库数据:
这是我的 MongoDB 数据 productqtydetails
集合。
[{
"_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 脚本:
db.productqtydetails.update({
_id : ObjectId("5d31567ea23d120f087a9ab1")
},
{
$set: {"sizes.$[].price": parseFloat("$sizes.$[].price") //Here I used parseInt(), NumberInt also
}
});
已更新Mongo数据库数据:
在 运行 脚本之后。我收到 price : 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 query/command.
中使用其次,更新命令不能有自引用(意味着您不能使用同一文档的 same/different 字段更新文档中的字段)。
简而言之,您不能在单个查询中执行此操作。您需要两个查询,第一个是获取,第二个是更新。
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}}
);
})