MongoDB Aggregation - запрос массива объектов - PullRequest
1 голос
/ 15 апреля 2020

У меня есть коллекция с этими данными:

[
    {
        _id: "123",
        number: 10,
        users: [
            {
                amount: 20
            }
        ]
    },
    {
        _id: "456",
        number: 20,
        users: [
            {
                amount: 10
            }
        ]
    }
]

Мне нужно найти документы, где users[0].amount больше или равно number. У меня следующий запрос Mon goose:

Model.aggregate([
    {
        $match: {
            $expr: {
                $and: [
                    { $gte: ["$users.0.amount", "$number"] },
                    ...
                ]
            }
        }
    }
]);

Однако, похоже, это не фильтрует документы должным образом. Я предполагаю, $users.0.amount не правильный синтаксис. Как я могу это исправить?

1 Ответ

1 голос
/ 15 апреля 2020

$ expr требует синтаксиса Aggregation Framework, поэтому вместо него необходимо использовать $ arrayElemAt :

{  $gte: [ { $arrayElemAt: [  "$users.amount",  0] }, "$number" ] }

, где users.amount - массив чисел

Площадка MongoDB

...