MongoDB Aggregation $ соответствует двойному вложенному объекту - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь запросить свои события по их датам. Итак, каждое событие имеет дату начала и дату окончания.

Структура моей коллекции, в которой находятся эти события, следующая:

 {
    "_id": "5f2a7feae0c4e10017308fe5",
    "events": [
        {
            "_id": "5f2a802ce0c4e10017308fe8",
            "end": {
                "dateTime": "2020-08-05T23:46:00.000Z"
            },
            "start": {
                "dateTime": "2020-08-05T22:46:00.000Z"
            }
        }, ...
    ]
}

Итак, я попробовал следующий метод агрегирования:

Значения start и end представляют собой строки ISO, которые в моем случае являются началом и концом года.

   Collection.aggregate([
    { $match: {owner: owner_id}},
    {$unwind: '$events'},
    {  $match : 
      { 'events.start.dateTime': 
        {$gte: start, 
        $lt: end
        }
      }
    }, 
    {$sort: {'events.start.dateTime': 1}}, 
    {$group: {_id: '$_id', 'events': {$push: '$events'}}}
])

Когда Я пробую это с фильтром $ match и получаю пустой массив обратно. Но если я попробую без фильтра $ match . Я получаю обратно все события из коллекции.

Кто-нибудь знает, где может быть проблема?

1 Ответ

1 голос
/ 05 августа 2020

На самом деле новая дата ('2020-06-17T10: 03: 46.000Z') помогла мне.

Итак, мой запрос выглядит следующим образом:

Collection.aggregate([
    { $match: { $and: [ {owner: owner_id}, { 'events.start.dateTime': {"$gte": new Date(start), "$lt": new Date(end) } } ] } },
    {$unwind: '$events'}, 
    {$sort: {'events.start.dateTime': 1}}, 
    {$group: {_id: '$_id', 'events': {$push: '$events'}}}
...