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

Moongoose tổng hợp $ trận đấu không khớp với id's

ids của bạn biến sẽ được xây dựng bằng "chuỗi", chứ không phải ObjectId giá trị.

Giá trị chuỗi "autocasts" Mongoose cho ObjectId vào đúng loại của chúng trong các truy vấn thông thường, nhưng điều này không xảy ra trong quy trình tổng hợp, như được mô tả trong vấn đề # 1399.

Thay vào đó, bạn phải thực hiện truyền chính xác để nhập thủ công:

ids = ids.map(function(el) { return mongoose.Types.ObjectId(el) })

Sau đó, bạn có thể sử dụng chúng trong giai đoạn chuyển tiếp của mình:

{ "$match": { "_id": { "$in": ids } } }

Lý do là vì các đường ống tổng hợp "thường" thay đổi cấu trúc tài liệu và do đó mongoose không cho rằng "lược đồ" áp dụng cho tài liệu trong bất kỳ giai đoạn đường ống nhất định nào.

Có thể cho rằng giai đoạn đường dẫn "đầu tiên" khi nó là $match giai đoạn nên làm điều này, vì thực sự tài liệu không bị thay đổi. Nhưng hiện tại đây không phải là cách nó xảy ra.

Bất kỳ giá trị nào có thể là "chuỗi" hoặc ít nhất không phải là loại BSON chính xác cần phải được truyền theo cách thủ công để khớp.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb PHP - Số nguyên với số thập phân

  2. Ẩn chính xác thông tin đăng nhập cơ sở dữ liệu

  3. Xử lý BSON Marshaling tùy chỉnh

  4. Cách tốt nhất để kết nối với MongoDB bằng Node.js

  5. MongoDB - Tổng hợp - Để nhận các mục duy nhất trong mảng