MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak FILTROWAĆ dane zwrócone między dwiema datami z mongodb za pomocą agregacji:dopasowania, wyszukiwania i projektu?

Twoje rozwiązanie wygląda prawie dobrze, pod warunkiem, że dateStart i dateStart są w rzeczywistości Date obiekty, a nie String s.

Twój Wypróbuj 2 był niekompletny Nie jestem pewien, czy używa $lookup z Wypróbuj 1 albo nie. Jeśli tak, upewnij się, że wyjście $lookup jest takie samo jak wejście $filter . Powinieneś więc zmienić as w $lookup aby dopasować input z $filter

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

}

Alternatywne rozwiązanie

Nie jestem pewien, co chcesz jako wyjście. Jeśli potrzebujesz tylko tablicy powiadomień bez obiektu użytkownika, możesz wypróbować następujące.

[{
  $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. Jak uzyskać dane z tablicy w manguście?

  2. Radzenie sobie z warunkami wyścigowymi i głodem podczas generowania unikalnych identyfikatorów za pomocą MongoDB + NodeJS

  3. Czy można używać identyfikatora obiektu Mongo jako unikalnego identyfikatora? Jeśli tak, jak mogę przekonwertować go na ciąg i wyszukać go według ciągu?

  4. Sortowanie agregacji addToSet wynik

  5. Nieprzechwycony błąd:Gdy opcja modyfikatora ma wartość true, obiekt walidacji musi mieć co najmniej jeden operator