Bạn cần sử dụng $ne
nhà điều hành.
var data = { 'kind': 'tortoise', 'hashtag': 'foo' };
Model.update(
{ 'articles.hashtag': { '$ne': 'foo' } },
{ '$addToSet': { 'articles': data } }
)
Thao tác này sẽ chỉ cập nhật tài liệu nếu không có tài liệu con nào trong mảng "bài viết" có giá trị của thẻ bắt đầu bằng # bằng "foo".
Như @BlakesSeven đã đề cập trong nhận xét
$addToSet
trở nên không liên quan khi bạn đang kiểm tra sự hiện diện của một trong các giá trị, vì vậy đây cũng có thể là$push
để rõ ràng mã. Nhưng nguyên tắc là đúng vì$addToSet
hoạt động trên toàn bộ đối tượng chứ không chỉ một phần của nó.
Model.update({
{ 'articles.hashtag': { '$ne': 'foo' } },
{ '$push': {'articles': data } }
)