更新 mongodb 中的深层嵌套数组
我正在尝试更新猫鼬中的字段值.
<代码>{_id":ObjectId(5b62c772efedb6bd3f0c983a"),projectID":ObjectId(0000000050e62416d0d75837"),__v":0,clientID":ObjectId(00000000996b902b7c3f5efa"),检查数据":[{pdf":空,已发布":N",提交时间":ISODate(2018-08-02T08:57:08.532Z"),用户ID":对象ID(00000000cac68e3bc04643f7"),"insSummary" : "检查区域","insName" : "信息技术","_id" : ObjectId("5b62c772fa02622a18655e7b"),"published_date" : ISODate("2018-08-02T08:57:22.041Z"),位置方面":[{方面名称":一楼","_id" : ObjectId("5b62c772fa02622a18655e80"),评论" : [{"_id" : ObjectId("5b62c772fa02622a18655e81"),图片" : [{路径":/uploads/inspection/00000000996b902b7c3f5efa/images/1533200242005-IpjLKH4XFWNEcHXa.png","img_name" : "1533200242005-IpjLKH4XFWNEcHXa.png",标题":粉丝",身份证":1"},{路径":/uploads/inspection/00000000996b902b7c3f5efa/images/1533200242008-YN8IlA5yrMn3cBnn.png",img_name":1533200242008-YN8IlA5yrMn3cBnn.png",标题":盒子",身份证":2"}],评论" : [评论4"],推荐" : ""}]}]}
这里我想将图像数组中的标题 Fan 更新为 table fan.
我尝试了 $set 但我不知道如何处理我的数据库结构.
请给个解决办法
**更新:**
我试过这段代码:
mongo.inspection.update({"projectID" : mongoose.Types.ObjectId(req.body.project_id) },{ "$set": {inspection_data.$[e1].locationAspects.$[e2].comments.$[e3].images.$[e4].title":TableFan"}},{数组过滤器":[{ "e1._id": mongoose.Types.ObjectId(req.body.insId)},{ "e2._id": mongoose.Types.ObjectId(req.body.aspectId)},{ "e3._id": mongoose.Types.ObjectId(req.body.commentId)},{e4.id":1"}]},函数(错误,响应){如果(错误){控制台日志(错误")}别的{console.log('更新')控制台日志(响应)}})db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
它的显示已更新,但在我的数据库中没有任何变化.是不是我做错了什么?
解决方案你可以试试 arrayFilters
in mongodb
var mongoose = require('mongoose')临时更新({ "_id" : mongoose.Types.ObjectId("5b62c772efedb6bd3f0c983a") },{ "$set": {"inspection_data.$[e1].locationAspects.$[e2].comments.$[e3].images.$[e4].title": "TableFan"}},{数组过滤器":[{ "e1._id": mongoose.Types.ObjectId("5b62c772fa02622a18655e7b") },{ "e2._id": mongoose.Types.ObjectId("5b62c772fa02622a18655e80") },{ "e3._id": mongoose.Types.ObjectId("5b62c772fa02622a18655e81") },{e4.id":1"}]})
<块引用>
注意:您必须将 _id
转换为 ObjectId
I am trying to update field value in mongoose.
{
"_id" : ObjectId("5b62c772efedb6bd3f0c983a"),
"projectID" : ObjectId("0000000050e62416d0d75837"),
"__v" : 0,
"clientID" : ObjectId("00000000996b902b7c3f5efa"),
"inspection_data" : [
{
"pdf" : null,
"published" : "N",
"submissionTime" : ISODate("2018-08-02T08:57:08.532Z"),
"userID" : ObjectId("00000000cac68e3bc04643f7"),
"insSummary" : "inspected areas",
"insName" : "Infotech",
"_id" : ObjectId("5b62c772fa02622a18655e7b"),
"published_date" : ISODate("2018-08-02T08:57:22.041Z"),
"locationAspects" : [
{
"aspectname" : "Ground floor",
"_id" : ObjectId("5b62c772fa02622a18655e80"),
"comments" : [
{
"_id" : ObjectId("5b62c772fa02622a18655e81"),
"images" : [
{
"path" : "/uploads/inspection/00000000996b902b7c3f5efa/images/1533200242005-IpjLKH4XFWNEcHXa.png",
"img_name" : "1533200242005-IpjLKH4XFWNEcHXa.png",
"title" : "Fan",
"id" : "1"
},
{
"path" : "/uploads/inspection/00000000996b902b7c3f5efa/images/1533200242008-YN8IlA5yrMn3cBnn.png",
"img_name" : "1533200242008-YN8IlA5yrMn3cBnn.png",
"title" : "Box",
"id" : "2"
}
],
"comment" : [
"comment4"
],
"recommendation" : ""
}
]
}]
}
Here I want to update a title Fan in image array as table fan.
I tried $set but I don't know how to do for my db structure.
Kindly give some solution to this
**Updated:**
I tried this code:
mongo.inspection.update({"projectID" : mongoose.Types.ObjectId(req.body.project_id) },
{ "$set": {
"inspection_data.$[e1].locationAspects.$[e2].comments.$[e3].images.$[e4].title" : "TableFan"
}},
{ "arrayFilters": [
{ "e1._id": mongoose.Types.ObjectId(req.body.insId)},
{ "e2._id": mongoose.Types.ObjectId(req.body.aspectId)},
{ "e3._id": mongoose.Types.ObjectId(req.body.commentId)},
{ "e4.id": "1" }
]},function(err,response){
if(err){
console.log("error")
}
else{
console.log('Updated')
console.log(response)
}
})
db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
Its showing updated but in my db there is no change. Is any mistake I did ?
解决方案You can try with arrayFilters
in mongodb
var mongoose = require('mongoose')
Temp.update(
{ "_id" : mongoose.Types.ObjectId("5b62c772efedb6bd3f0c983a") },
{ "$set": {
"inspection_data.$[e1].locationAspects.$[e2].comments.$[e3].images.$[e4].title": "TableFan"
}},
{ "arrayFilters": [
{ "e1._id": mongoose.Types.ObjectId("5b62c772fa02622a18655e7b") },
{ "e2._id": mongoose.Types.ObjectId("5b62c772fa02622a18655e80") },
{ "e3._id": mongoose.Types.ObjectId("5b62c772fa02622a18655e81") },
{ "e4.id": "1" }
]}
)
Note: You have to cast
_id
toObjectId
相关文章