该字段必须是一个累加器对象
Posted
技术标签:
【中文标题】该字段必须是一个累加器对象【英文标题】:The field must be an accumulator object 【发布时间】:2020-01-01 20:42:10 【问题描述】:我刚刚阅读了关于 mongoose 中的聚合的内容,这似乎是一种非常有用的方法,我只是自己测试了一些东西,所以这是我在数据库中的数据:
[
product: "chanchuris arayi",
myidveli: "lg",
pasi: 12
,
product: "kalbasi",
myidveli: "maiko",
pasi: 10
,
product: "chanchuris arayi",
myidveli: "zaza",
pasi: 12
,
product: "sulguni",
myidveli: "shotiko",
pasi: 7
,
product: "kalbasi",
myidveli: "lg",
pasi: 10
]
这是我的代码
db.collection.aggregate([
$match:
,
$group:
_id: "$_id",
product: "$product",
pasi:
"$sum": "$pasi"
])
它给了我错误:,当我在 _id 字段中键入 $product 时,它按我想要的方式工作,但不是这样,所以我很困惑谁能解释我如何聚合正在工作,我的代码有什么问题?
谢谢!
【问题讨论】:
好几件事,1) 聚合是 mongoDB 原生的(它是一个管道,可以容纳每个阶段处理数据的阶段链,最后阶段是一种输出),尽管您可能已经读过它猫鼬没关系。 2) $match 确实像 .find() 一样工作,如果您没有任何要过滤的内容,则不需要它。 3)当你在'_id'上分组时,你的样本数据在哪里,你不能像这样对产品进行分组,因为它是数组的许多对象中的一个字段 - 你能否提供整个文档和所需的输出!! 我唯一想知道的是为什么我必须在 _id 而不是任何其他字段上分组 您可以对任何字段和字段组合进行分组,但不能像在数组中的字段上那样分组,如果您可以提供整个文档和所需的 o/p,我可以帮助您查询.. 【参考方案1】:我希望这是您要查找的查询:
db.collection.aggregate( [
$unwind: path: "$test" ,
$group: "_id": "$test.product",
"pasi": $sum: "$test.pasi" ] )
【讨论】:
以上是关于该字段必须是一个累加器对象的主要内容,如果未能解决你的问题,请参考以下文章
java并发 day04CAS 原子整数 原子引用 原子数组 字段更新器和原子累加器 unsafe CPU缓存结构 不可变类 final的原理
java并发 day04CAS 原子整数 原子引用 原子数组 字段更新器和原子累加器 unsafe CPU缓存结构 不可变类 final的原理
java并发 day04CAS 原子整数 原子引用 原子数组 字段更新器和原子累加器 unsafe CPU缓存结构 不可变类 final的原理
java并发 day04CAS 原子整数 原子引用 原子数组 字段更新器和原子累加器 unsafe CPU缓存结构 不可变类 final的原理