Chỉ mục duy nhất trên một trường mảng thực thi rằng cùng một giá trị không thể xuất hiện trong các mảng của nhiều hơn một tài liệu trong bộ sưu tập, nhưng không ngăn cùng một giá trị xuất hiện nhiều lần trong mảng của một tài liệu. Vì vậy, bạn cần đảm bảo tính duy nhất khi thêm các phần tử vào mảng.
Sử dụng $addToSet toán tử để thêm giá trị vào một mảng chỉ khi giá trị đó chưa có.
Group.updateOne({name: 'admin'}, {$addToSet: {users: userOid}}, ...
Tuy nhiên, nếu users mảng chứa các đối tượng có nhiều thuộc tính và bạn muốn đảm bảo tính duy nhất cho chỉ một trong số chúng (uid trong trường hợp này), thì bạn cần thực hiện một cách tiếp cận khác:
var user = { uid: userOid, ... };
Group.updateOne(
{name: 'admin', 'users.uid': {$ne: user.uid}},
{$push: {users: user}},
function(err, numAffected) { ... });
Điều đó làm đủ điều kiện cho $push cập nhật chỉ xảy ra nếu user.uid chưa tồn tại trong uid trường của bất kỳ phần tử nào của users . Vì vậy, nó bắt chước $addToSet hành vi, nhưng chỉ đối với uid .