node.js - MongoError:向数组元素添加新字段时无法识别表达式 $addFields
问题描述
在一个集合中,我有一个文档,其中一个字段等于包含另一个文档的数组(“类别”),在下面的代码中为什么我会收到以下错误:MongoError: Unrecognized expression '$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
})
}
})
解决方案
$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: {
$mergeObjects: ['$$current', {
countOfIntelligence: {
$size: '$$current.listOfIntelligences'
}
}]
}
}
}
}
}
]).toArray((err, res2) => {
if (err) {
console.log(err)
} else {
res.send({
categories: res2
})
}
})
参考 : $addFields , $mergeObjects
推荐阅读
- ruby-on-rails - Heroku 上 Rails 应用程序的数据库迁移错误(找不到用户 ID)
- java - XML JAXB marshall 不保存到 xml 文件
- python - 如何在特定位置的结构中插入元组?
- vb.net - 如何从一个项目中启动其他项目
- google-app-engine - Google App Engine Flex 环境:在 gzip 压缩资源时删除了 ETag HTTP 标头?
- php - 未定义的属性:stdClass::$id_cores
- android - 安卓芯片占用额外空间;无法换行
- node.js - i 函数:由于 node_modules 存在问题,无法解析您的函数(见上文)
- java - 如果使用 Java 的 Selenium 中按行和列的特定单元格为空,则无法使用 Apache POI 签入 excel
- python - 日期时间字符串系列到字符串格式 %d-%m-%Y