Bạn đang sử dụng mẫu "mảng đối tượng". Bạn có thể sử dụng toán tử vị trí, nó sẽ trông giống như sau:
coll.update( {'_id':'2', 'users._id':'2'}, {$set:{'users.$':{ "_id":2,"name":"name6",... }}}, false, true)
Theo kinh nghiệm của tôi, mẫu "mảng đối tượng" không tối ưu nếu các đối tượng có ID tự nhiên. Trong trường hợp của bạn, điều này có thể được mô hình như sau:
{
"_id" : "2",
"users" :
{ "1" : { "name" : "name1", "xyz..." : "xyz1..." },
"2" : { "name" : "name2", "xyz..." : "xyz2..." }
}
"name" : "main name"
}
Trong trường hợp này, bạn có thể sử dụng ký hiệu dấu chấm để dễ dàng cập nhật mục bạn muốn.
var newValue = { "name" : "name6", "xyz..." : "xyz5...", "morefields..." : "fields..." };
coll.update({_id: 2}, { $set: { "users.2" : newValue } });