Tôi có một bộ sưu tập với một sơ đồ sau:MongoDB cập nhật các yếu tố cụ thể từ subarray
{
"_id" : 28,
"n" : [{
"a" : ObjectId("4ef8466e46b3b8140e000000"),
"c" : 28,
"p" : [ObjectId("4f00640646b3b88005000003"), ObjectId("4f00640146b3b88005000002"), ObjectId("4f00637d46b3b8cc0e000001"), ObjectId("4f00638046b3b8cc0e000002"), ObjectId("4f00638246b3b8cc0e000003"), ObjectId("4f00631646b3b85002000001"), ObjectId("4f00631846b3b85002000002")],
"u" : 26
}, {
"a" : ObjectId("4ef8466e46b3b8140e000000"),
"c" : 10,
"p" : [ObjectId("4f00640146b3b88005000002"), ObjectId("4f0063fd46b3b88005000001")],
"u" : 26
}, {
"a" : ObjectId("4ef8467846b3b8780d000001"),
"u" : 26,
"p" : [ObjectId("4f00637b46b3b8cc0e000000")],
"c" : 28
}, {
"a" : ObjectId("4ef85a3e46b3b84408000000"),
"u" : 26,
"p" : [ObjectId("4f00631046b3b85002000000")],
"c" : 28
}]
}
Tôi cần cập nhật một trong những yếu tố trong mảng trong tài liệu với _id = 28 nhưng chỉ khi một = một số giá trị và c = một số giá trị
db.coll.update({
'_id' : 28,
'n.a' : new ObjectId('4ef85a3e46b3b84408000000'),
'n.c' : 28
},
{
$push : {
'n.$.p' : ObjectId("4b97e62bf1d8c7152c9ccb74")
},
$set : {
'n.$.t' : ISODate("2013-05-13T14:22:46.777Z")
}
})
vì vậy, về cơ bản tôi muốn cập nhật các yếu tố cụ thể từ các mảng: và như xa như người ta có thể thấy, đây là yếu tố thứ tư. Vấn đề là khi truy vấn đang thực hiện, nó có khả năng cập nhật phần tử đầu tiên.
Làm cách nào để khắc phục sự cố?