MongoError: Нераспознанное выражение $ addFields при добавлении нового поля к элементам массива - PullRequest
1 голос
/ 07 марта 2020

В коллекции у меня есть документы, одно из их полей, равное массиву («категории»), которые содержат другие документы, в приведенном ниже коде, почему я получаю следующую ошибку: MongoError: Нераспознанное выражение '$ addFields'

dbUsers.aggregate([
        {
            $match: {
                key: req.cookies.key
            }
        }, {
            $project: {
                categories: {
                    $map: {
                        input: {
                            $filter: {
                                input: '$categories',
                                as: 'category',
                                cond: { $eq: ['$$category.parentId', req.headers.parentid] }
                            }
                        },
                        as: 'current',
                        in: {
                            $addFields: {
                                countOfIntelligence: {
                                    $size: '$$current.listOfIntelligences'
                                }
                        }}
                    }
                }
            }
        }
    ]).toArray((err, res2) => {
        if (err) {
            console.log(err)
        } else {
            res.send({
                categories: res2
            })
        }
    })

1 Ответ

1 голос
/ 07 марта 2020

$addFields - это этап агрегирования, вы не можете использовать его в качестве оператора там, если вы хотите добавить поле к каждому подзадаче c в массиве и воссоздать сам массив с обновленными под-документами, затем попробуйте запрос ниже:

dbUsers.aggregate([
    {
        $match: {
            key: req.cookies.key
        }
    }, {
        $project: {
            categories: {
                $map: {
                    input: {
                        $filter: {
                            input: '$categories',
                            as: 'category',
                            cond: { $eq: ['$$category.parentId', req.headers.parentid] }
                        }
                    },
                    as: 'current',
                    in: {
                        $mergeObjects: ['$$current', {
                            countOfIntelligence: {
                                $size: '$$current.listOfIntelligences'
                            }
                        }]
                    }
                }
            }
        }
    }
]).toArray((err, res2) => {
    if (err) {
        console.log(err)
    } else {
        res.send({
            categories: res2
        })
    }
})

Ref: $ addFields , $ mergeObjects

...