我正在尝试仅在一个字段中更新三级嵌入式文档。我在下面发布我的数据,其中我试图仅将一个字段更新到文档中。这是我要在其中更新查看值的收藏夹。 {
"_id": "5bbc7614b6160b29f05854c7",
"createdAt": "2018-10-09T09:34:12.604Z"
"subcategories": [
{
"status": "1",
"_id": "5bbc762fb6160b29f05854c8",
"createdAt": "2018-10-09T09:34:39.008Z",
"videos": [
{
"views": 0,
"createdAt": "2018-10-12T11:40:08.752Z",
"_id": "5bc08818ed05cf1c5e01103c",
"user_id": "5ba08df7a68f5f1e43f05983",
"description": "sdf",
"size": "30.76 MB",
"duration": "11:11",
"video": "https://www.gpnext.org"
},
{
"views": 10,
"createdAt": "2018-10-12T11:40:08.752Z",
"_id": "5bc08818ed05cf1c5e01103d",
"user_id": "5ba08df7a68f5f1e43f05984",
"description": "qwerty",
"size": "35.76 MB",
"duration": "10:10",
"video": "https://www.gpnext1.org"
}
]
},
]
}
我仅尝试更新观看次数值,但是当我执行下面提到的查询时,它正在删除所有视频数据并仅在其中插入观看次数字段。有人可以指导我在不影响其他字段值的情况下更新“视图”值。这是我的更新视图值的查询。
VideoCategory.findOneAndUpdate(
{'subcategories.videos._id' : mongoose.Types.ObjectId(req.body.video_id)},
{ $set :
{
'subcategories.$.videos': {
'views' : 4
}
}
},
function(err, category){
if (err)
return res.send({ status: false, message: 'error in Increment'});
else
return res.json({ status: true, message: 'View incremented'});
}
);
答案 0 :(得分:1)
位置运算符(<Selectpicker<Location> ... />
)仅适用于具有一级深度的阵列。在您的情况下,您需要positional filtered运算符,该运算符在MongoDB 3.6或更高版本中可用。试试:
$
答案 1 :(得分:0)
您将json对象设置为仅具有视图键,这就是为什么所有其他数据都希望删除“视图”的原因,在这种情况下,您需要使用位置运算符两次,就像这样
{
$set : {
"subcategories.$.videos.$.views": "4"
}
但是MongoDb在位置运算符上有局限性。 位置运算符只能在查询中使用一次。 这是问题链接https://jira.mongodb.org/browse/SERVER-831
我建议两种解决方案,但强烈建议使用第一种解决方案