Mam następujący schemat:

User: {
  age: Number,
  name: String,
  comments: {
    added: Date,
    body: String
  }
}

Potrzebuję dostać wszystkich użytkowników, a komentarze dodane większe niż data niestandardowa.

Przykładowe dane:

[{
  "name": "John",
  "age: 21,
  "comments": [{
     "added": 21-01-12,
     "body": "blabla1"    
  }, {
     "added": 21-02-12,
     "body": "blabla2"    
  }, {
     "added": 21-01-10,
     "body": "blabla3"   
  }]
}, {
  "name": "Bruno",
  "age: 33,
  "comments": [{
     "added": 21-01-10,
     "body": "ololo1"    
  }, {
     "added": 21-02-12,
     "body": "ololo2"    
  }, {
     "added": 21-01-09,
     "body": "ololo3"   
  }]
}]

Potrzebuję wszystkich użytkowników ze wszystkimi komentarzami większych niż {x0}} bez komentarzy mniejszej niż ta data.

Oczekiwany wynik:

{
  "name": "John",
  "age: 21,
  "comments": [{
     "added": 21-01-12,
     "body": "blabla1"    
  }, {
     "added": 21-02-12,
     "body": "blabla2"    
  }]
}, {
  "name": "Bruno",
  "age: 33,
  "comments": [{
     "added": 21-02-12,
     "body": "ololo2"    
  }]
}

Jak mogę się o to pójść?

0
Jackson 17 luty 2017, 15:17

2 odpowiedzi

Najlepsza odpowiedź
const findQuery = [
    {$unwind: "$comments" },
    {$match: {"comments.added": {$gt: lastUpdate} } },
    {$group: {_id: "$_id", comments: {$push: "$comments"} } }
];

User.aggregate(findQuery)
2
Jackson 17 luty 2017, 13:34

Aby filtrować pole daty w Mongoose (i Mongo), musisz użyć $ GTE, $ GT, $ LT, $ LTE. W konkretnym przykładzie potrzebujesz $ GTE (większy lub równy)

Jeśli twój model jest użytkownikiem użytkownika.find ({komentarze.Added: {$ GTE: Nowa data (2011, 1, 1)}}, Funkcja (Err, Comments) {

});

Z wyjątkiem sytuacji, gdy są pewne powody, mogę zaproponować, aby preferować izodę, która jest bardziej dokładna, a ty zrobisz to samo, aby filtrować wpisy

Mph.

0
Marc-Philippe Huget 17 luty 2017, 12:33