Vấn đề ở đây là bạn hiểu sai những điều đối phó.
Khi bạn thực hiện "outerArray.field.innerArray": { $in: [ 1, 3 ] }
vào truy vấn của bạn, bạn không chỉ nhận được innerArray
nơi có 1 hoặc 3. Bạn là tài liệu gettings tồn tại các mảng này.
Vì vậy, bạn đang truy vấn toàn bộ tài liệu.
Bạn phải sử dụng arrayFilter
để cập nhật các giá trị khi bộ lọc phù hợp.
Vì vậy, nếu tôi đã hiểu đúng về bạn, thì truy vấn bạn muốn là:
db.collection.update(
{}, //Empty object to find all documents
{
$push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
"arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})
Ví dụ tại đây
Lưu ý cách đối tượng đầu tiên vào update
trống rỗng. Bạn phải đặt ở đó trường để khớp với tài liệu (không phải mảng, tài liệu).
Nếu bạn chỉ muốn cập nhật một tài liệu, bạn phải điền vào đối tượng đầu tiên (đối tượng truy vấn) với các giá trị bạn muốn, ví dụ:{"_id": 11}
.