Пн goose дата Оператор $ gte не работает должным образом - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь написать запрос за прошлую неделю, но он не работает должным образом в mongoDB.

[{
    $lookup: {
        from: 'reviews',
        localField: 'groupReviews',
        foreignField: '_id',
        as: 'groupReviews'
    }
}, {
    $match: {
        $and: [{
                _id: {
                    $eq: ObjectId('5f247eea8ad8eb53883f4a9b')
                }
            },
            {
                "groupReviews.reviewCreated": {
                    $gte: ISODate('2020-06-20T10:24:51.303Z')
                }
            }
        ]
    }
}, {
    $project: {
        count: {
            $size: "$groupReviews",
        },
        groupReviews: {
            $slice: ["$groupReviews", 0, 20],
        }
    }
}, {
    $sort: {
        "groupReviews.reviewCreated": -1
    }
}]

фактический результат: приведенный выше код возвращает результаты старше 20.06.2020.

ожидаемый результат: он не должен отображаться старше 2020-06-20.

Я прилагаю изображение для справки.

Ссылка на изображение

1 Ответ

2 голосов
/ 06 августа 2020

Этапы $match соответствуют всем документам, а не отдельным элементам массива. Если массив содержит хотя бы один элемент, удовлетворяющий условию $gte, документ будет сопоставлен и передан по конвейеру.

Если вы хотите удалить отдельные элементы массива, которые старше указанной даты, вы можете

  • $ unwind массив перед сопоставлением и $ group , чтобы перестроить его только с соответствующими записями
  • Используйте $ filter на стадии $project, чтобы удалить нежелательные элементы перед нарезкой
...