Как использовать условие if в агрегате mongodb в node.js зависит от входных данных

#node.js #mongodb #aggregate

#node.js #mongodb #агрегировать

Вопрос:

Как я могу добавить условие if между агрегатной функцией, предполагая, что у меня есть один параметр из запроса «ввод», если у меня есть ввод, я хотел бы, чтобы идентификатор выглядел больше, чем этот идентификатор, если у меня нет ввода, я не буду сопоставлять идентификатор, как я могу достичь этого?

 collection.aggregate(
        // Pipeline
        [
            // Stage 1 
            {
                $match: {
                    "created_at": {$gte: fromDate, $lt: toDate},
                    "type": {$in : typeArray},
                    if (input){
                       "_id": {$gte: ObjectId("blahblahblah")}
                    }
                }
            },
            {
                $lookup: // Equality Match
                    {
                        from: "users",
                        localField: "some_id",
                        foreignField: "_id",
                        as: "user"
                    }
            },
            {
                $sort: 
                {
                    "_id": 1
                }
            },
            {
                $limit: pageSize
            }
        ])
 

Ответ №1:

Вы можете использовать так, для условия IF

{ $cond: { если: (логическое выражение), то: (true-case), иначе: (false-case) } }

или

{ $cond: [ (логическое выражение), (истинный регистр), (ложный регистр) ] }

для получения ссылок вы можете ознакомиться с документацией

https://docs.mongodb.com/manual/reference/operator/aggregation/cond/

Комментарии:

1. у меня есть только условие if без else, опять же, если условие исходит из моего ввода, а не из моей базы данных, я хочу сопоставить его только в том случае, если мой ввод имеет значение true

2. тогда у вас может быть условие перед вашим агрегированным запросом