Сумма агрегации в MongoDB

#mongodb #aggregation-framework

#mongodb #структура агрегации

Вопрос:

Я хочу суммировать два поля из коллекции Mongo; поля могут быть строкой, числом или не существовать; эти две стратегии в конвейере агрегации, похоже, не работают (я всегда получаю нулевое значение как Int32) Первая стратегия:

 "field1": {
                            $sum: {
                                $add: [
                                    {
                                        $toInt: {
                                            $ifNull: [
                                                "$field2",
                                                0
                                            ]
                                        }
                                    },
                                    {
                                        $toInt: {
                                            $ifNull: [
                                                "$field3",
                                                0
                                            ]
                                        }
                                    }
                                ]
                            }
                        },
                                        
 

Вторая стратегия:

 "field4": {
                            $sum: {
                                $add: [
                                    {
                                        $convert: {
                                            input: {
                                                $ifNull: [
                                                    "$field5",
                                                    0
                                                ]
                                            },
                                            to: "int",
                                            onError: 0,
                                            onNull: 0
                                        }
                                    },
                                    {
                                        $convert: {
                                            input: {
                                                $ifNull: [
                                                    "$field6",
                                                    0
                                                ]
                                            },
                                            to: "int",
                                            onError: 0,
                                            onNull: 0
                                        }
                                    }
                                ]
                            }
                        },                      
 

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

1. Использовать {$match: {$expr: { $isNumber: "$field5" }}} или {$match:{ field5: { $type: [ "double", "int", "long", "decimal" ] } } }

2. Можете ли вы показать нам некоторые из ваших документов и ожидаемые результаты?