MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да ФИЛТРИРАм върнатите данни между две дати от mongodb с помощта на агрегиране:съвпадение, търсене и проект?

Вашето решение изглежда почти правилно, при условие че dateStart и dateStart всъщност са Date обекти, а не String с.

Вашият Опитайте 2 беше непълна. Не съм сигурен, че използва $lookup от Опитайте 1 или не. Ако е така, трябва да се уверите, че изходът на $lookup е същото като въвеждането на $filter . Така че трябва да промените as в $lookup за да съответства на input на $filter

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

}

Алтернативно решение

Не съм сигурен какво искате като изход. Ако имате нужда само от масив от известия без потребителския обект, можете да опитате следното.

[{
  $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. Определете дали записът е нов в обратното извикване за предварително запазване

  2. Разлики между com.mongodb.client.MongoClient и com.mongodb.MongoClient

  3. Изчислете точково произведение между два масива с MongoDB Aggregate

  4. Keyset (Seek) Pagination в Spring Data MongoDB

  5. Запитване за дати с данни на Mongo Spring срещу конзолата на Mongo (дати)