Tôi có bộ sưu tập sự kiện mà tôi sẽ tìm kiếm để tìm một sự kiện cụ thể và sau đó tôi đang cập nhật bộ sưu tập khác của mình bằng cách sử dụng $ push tuyên bố. Vấn đề là khi hai sự kiện có cùng một danh mục nó sẽ tạo ra một bản sao, mà tôi không muốn.Đẩy phần tử vào một mảng nếu nó không có mặt (không trùng lặp)
Tôi biết về upserts nhưng tôi không chắc chắn nếu họ là cách tốt nhất để đi về việc này? Và tôi là một chút bối rối khi nói đến cách thực sự viết một upsert mà làm việc với "$ đẩy" -statement.
Đây là cách cập nhật của tôi trông ngay bây giờ:
self.users.update({"user_id": event['userid']}, {'$push': {'campaigns': UserCampaign}})
..where:
UserCampaign = {
"id": campaign['id'],
"name": campaign['name']
}
Các "UserCampaign" được lấp đầy với các thông tin tương tự theo thời gian, và vì tôi bộ sưu tập có lẽ sẽ rất lớn tôi muốn hoàn thành điều này càng hiệu quả càng tốt.
TLDR; Tôi muốn cập nhật mảng trong tài liệu được tìm thấy bằng cách sử dụng "đẩy" mà không có nguy cơ bị trùng lặp.
ah, tôi đã chỉ một số người khác cho toán tử $ addToSet trước đây, nhưng tôi nghĩ cách câu hỏi được đặt thành câu trả lời liên quan đến upserts thay vì thêm vào một mảng các phần tử, đặc biệt là khi câu hỏi tóm tắt cuối cùng của bạn nói rõ: "cập nhật bộ sưu tập của tôi bằng cách sử dụng" đẩy "" khi bạn có ý nghĩa gì đó như: cập nhật mảng trong tài liệu bằng cách sử dụng tính năng đẩy mà không có phần tử trùng lặp. Tôi đã chỉnh sửa câu hỏi để phản ánh tốt hơn các yêu cầu thực tế của bạn –
Có Tôi hiểu rằng các bạn có thể khó biết những gì tôi cần. Đó là lời giải thích tồi tệ của tôi về vấn đề đó là lỗi. Tôi xin lỗi, nhưng tôi đã tìm được giải pháp làm việc và lý do tại sao tôi chỉ ra rằng $ đẩy mạnh trong tiêu đề là vì tôi thực sự nghĩ đó là những gì tôi sẽ sử dụng. Dù sao, tôi đọc về $ addToSet và ngay lập tức biết đó là nhà điều hành sẽ giải quyết vấn đề của tôi. Cảm ơn sự giúp đỡ của bạn và tôi đã cập nhật chủ đề này để mọi người bối rối như tôi trong tương lai có thể được sửa chữa, như tôi đã làm. – Ms01