Bạn có thể sử dụng $ addToSet để thêm vào một tập hợp để đảm bảo rằng không có phần tử mảng nào trùng lặp, nhưng điều đó sẽ không hiệu quả đối với trường hợp "đang cập nhật" của bạn.
Để làm những gì bạn muốn, bạn sẽ cần phải thay đổi cấu trúc dữ liệu của mình thành một cái gì đó như:
{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
"component_id" : 1,
"_locales" : {
"nl_NL" : {
"url" : "dutch"
}
}
}
Giờ đây, bạn có thể cập nhật ngôn ngữ nl_NL chỉ với:
db.components.update( { component_id: 1 }, { $set: { '_locales.nl_NL.url' : 'new url' } }, true );
Và một ngôn ngữ mới cũng sẽ hoạt động, chẳng hạn như với:
db.components.update( { component_id: 1 }, { $set: { '_locales.en_US.url' : 'American' } }, true );
Bạn cũng có thể muốn xem xét việc đặt ngôn ngữ như một phần của đối tượng lồng nhau, chẳng hạn như trong:
{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
"component_id" : 1,
"_locales" : {
"nl_NL" : {
"url" : "dutch"
"locale" : "nl_NL"
}
}
}
Điều này giúp truy xuất dữ liệu dễ dàng hơn trong một số trường hợp.