如何使用Mongoose Node JS更新mongo DB中另一个嵌套数组中的嵌套数组字段



有一个文档在嵌套数组中有一个嵌套数组。在其中一种情况下,我想更新子数组的子数组。

{
"_id": "62da8472669b750870b094f6",
"name": "Test Expert",
"user_id": "62bdabee9aa50c0028d60767",
"services": [
{
"service_name": "Hello 2",
"service_id": "62ce7393534bda04d40f42c3",
"_id": "62ce7394534bda04d40f42c4",
"videos": [
{
"_id": "62da8472669b750870b094f8",
"lv_guid_id": "fsdfdshflsdhj",
"status": "REQUESTED" //Need to update this element status
},
{
"_id": "62da8472669b750870b09sdw",
"lv_guid_id": "gdfgdfgfdg",
"status": "REQUESTED" //Need to update this element status
}
]
}
],
"__v": 0
}

在上面的文档中,我想更新videos数组中的元素,而这个videos数组是services数组的嵌套数组。

这是我尝试过的,但我无法获得第二个嵌套数组的位置。

this.findOneAndUpdate(
{ _id: new mongoose.Types.ObjectId(orderID), "services._id": new mongoose.Types.ObjectId(videoDetail.service_id), "services.videos.lv_guid_id": videoDetail.lv_guid_id },
{
$set: {
"services.$.videos./*Need to fetch the position of this element to update*/.status": videoDetail.status
}
},
{ upsert: true, new: true }
);

您可以使用arrayFilters条件,

  • 创建变量v并检查lv_guid_id的条件
this.findOneAndUpdate(
{ 
_id: new mongoose.Types.ObjectId(orderID), 
"services._id": new mongoose.Types.ObjectId(videoDetail.service_id)
},
{
$set: { "services.$.videos.$[v].status": videoDetail.status }
},
{
arrayFilters: [{ "v.lv_guid_id": videoDetail.lv_guid_id }],
upsert: true,
new: true
}
)

游乐场

注意:您不能追加子文档/数组元素

如果我说对了,你所要做的就是"services.$.videos.$.status"。试试看。

this.findOneAndUpdate(
{  _id: new mongoose.Types.ObjectId(orderID), "services._id": new mongoose.Types.ObjectId(videoDetail.service_id), "services.videos.lv_guid_id": videoDetail.lv_guid_id },
{ $set: { "services.$.videos.$.status": videoDetail.status } },
{ new: true },
)

最新更新