MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cố gắng chỉ điền vào mongoose nếu ref không null - không hoạt động

bạn cần hiểu thứ tự thực thi mã của mình:

  1. mongoose lấy tất cả sách từ cơ sở dữ liệu trong đó {_creator:{$ne:null}} . Mongo chỉ xem tài liệu tham khảo bên trong bộ sưu tập sách để xác định tài liệu nào cần trả lại. Sách của bạn vẫn có liên quan đến tác giả và mongo sẽ không nhận thấy rằng không có Tác giả phù hợp trong bộ sưu tập Tác giả, vì vậy sách của bạn đã được tải.

  2. mongoose đang điền tất cả các kết quả trả về:vì vậy nó đang tải các tác giả từ bộ sưu tập Tác giả và thay thế các tham chiếu bằng các đối tượng thực. Đối với cuốn sách của bạn, nó không tìm thấy tác giả phù hợp, vì vậy nó đặt null ở đó.

Đó là lý do tại sao bạn kết thúc với danh sách kết quả của mình.

Mongo không hỗ trợ kết hợp - do đó bạn không thể thực hiện truy vấn bao gồm dữ liệu từ nhiều hơn một tập hợp. Điền chỉ là một cách để thay thế các tham chiếu trong danh sách kết quả của bạn bằng dữ liệu thực, bạn không bao giờ có thể sử dụng dữ liệu đã phổ biến như một phần của mệnh đề where.

Để giải quyết vấn đề của mình, bạn có thể:

  • lọc danh sách kết quả cuối cùng của bạn trong mã JS, ví dụ:với _.filter của thư viện lodash.
  • cập nhật tất cả sách của bạn và xóa tài liệu tham khảo bất cứ khi nào bạn xóa tác giả. Bạn có thể sử dụng các hook trên Author-Schema để thực hiện việc này.

AuthorSchema.post('remove', function(doc) {// update your books here});




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Cách đổi tên trường bằng regex

  2. Bắt đầu với Node.js, angle.js và MongoDB, lập mô hình quan hệ và các mẹo tăng cường khác

  3. Cách viết truy vấn Mongo để tìm tài liệu con với điều kiện

  4. Tạo _id trên các tài liệu con trên mongoimport --jsonArray

  5. Đặt tùy chọn smallfiles để kiểm soát việc ghi nhật ký không kiểm soát kích thước