Hiện tại (MongoDB> =3.6) có một cách để thực hiện việc này với arrayFilters và $ [số nhận dạng] .
Ví dụ dưới đây đang sử dụng mongoose và sẽ thêm một mục vào một mảng bên trong một mảng lồng nhau kép. Một bài viết hay giải thích điều này đây .
const blogPost = await BlogPost.create({
title : 'A Node.js Perspective on MongoDB 3.6: Array Filters',
comments : [
{ author : 'Foo', text : 'This is awesome!', replies : { name : 'George', seenBy : ['Pacey'] } },
{ author : 'Bar', text : 'Where are the upgrade docs?', replies : { name : 'John', seenBy : ['Jenny'] } }
]
});
const updatedPost = await BlogPost.findOneAndUpdate({ _id : blogPost._id }, {
$addToSet : {
'comments.$[comment].replies.$[reply].seenBy' : 'Jenny'
}
}, {
arrayFilters : [{ 'comment.author' : 'Foo' }, { 'reply.name' : 'George' }],
new : true
});
console.log(updatedPost.comments[0].replies);