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

Làm cách nào để LỌC dữ liệu trả về giữa hai ngày từ mongodb bằng cách sử dụng tổng hợp:đối sánh, tra cứu và dự án?

Giải pháp của bạn gần như đúng, miễn là dateStartdateStart thực sự là Date các đối tượng chứ không phải String s.

Thử 2 của bạn chưa hoàn thành Tôi không chắc nó sử dụng $lookup từ Thử 1 hay không. Nếu vậy, bạn phải đảm bảo đầu ra của $lookup giống với đầu vào của $filter . Vì vậy, bạn nên thay đổi as trong $lookup để khớp với input trong số $filter

{
  $lookup: {
    from: "notifications",
    localField: "accessToken",
    foreignField: "accessToken",
    as: "items" // here
  }

}

Giải pháp thay thế

Tôi không chắc bạn muốn gì dưới dạng đầu ra. Nếu bạn chỉ cần mảng thông báo mà không cần đối tượng người dùng, bạn có thể thử các cách sau.

[{
  $match: { userId: mongoose.Types.ObjectId(userId) }
}, {
  $lookup: {
    from: "notifications",
    localField: "accessToken", // don't forget to index register.accessToken
    foreignField: "accessToken", // don't forget to index notification.accessToken
    as: "notifications"
  }
}, {
  $unwind: "$notifications"
}, {
  $match: { 
    dateCreated: { $gte: dateStart, $lte: dateEnd } // dateStart, dateEnd should be Date objects
  }
}, { // optional, move notifications to top lvel
  $replaceRoot: { root: '$notifications' }
}]



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kết quả truy vấn mô hình Rails Mongoid trả về thông tin kích thước / chiều dài / số lượng sai ngay cả khi sử dụng giới hạn

  2. Cách tạo lược đồ mảng mảng đối tượng trong Mongoose.js

  3. Chỉ số tổng hợp Mongoose Duy nhất + thưa thớt

  4. mongoexport lỗi phân tích cú pháp JSON

  5. Quyền bị từ chối khi lệnh 'mongod' được chạy sau khi cài đặt thành công