带有 $sum 操作的 Mongodb 位置运算符“$”不起作用
Posted
技术标签:
【中文标题】带有 $sum 操作的 Mongodb 位置运算符“$”不起作用【英文标题】:Mongodb positional operator " $ " with $sum operation not working 【发布时间】:2021-07-26 03:43:58 【问题描述】:我正在开发一个电子商务网络应用程序,我使用 MEAN 堆栈。
我有一个订单集合,每个订单都有一个payment
字段,其中包含用于支付数据的子文档(affiliate marketer
、sellersPayment
、website
、referral
)
我的问题是关于 sellersPayment
字段,我有一个类似
sellersPayment: [
amount: 50,
isPaid: false,
seller: ObjectId('seller 1 id'),
,
amount: 80,
isPaid: true,
seller: ObjectId('seller 2 id'),
,
]
问题是我想查询在该数组 ant 内的 seller
字段上有特定卖家的订单,然后对 amount
字段求和
这是我的方法:
await Order.aggregate([
$match:
"payment.sellersPayment":
$elemMatch:
seller: ObjectId(user._id),
isPaid: false,
,
,
,
$group:
_id: null,
confirmedBalance: $sum: "$payment.sellersPayment.$.amount" ,
,
,
$project:
confirmedBalance: 1,
,
,
]);
我收到此错误
" FieldPath 字段名称不能以 '$' 开头" 有什么解决办法吗?
【问题讨论】:
你能提供一个输入和输出的例子吗?此外,您不能使用两个位置运算符$
。尝试在"$payment.sellersPayment.$.amount"
中删除其中一个@
非常感谢,我将最后一条评论标记为已接受的答案。
【参考方案1】:
我收到此错误“FieldPath 字段名称可能不以'$'开头”任何解决方案?
confirmedBalance: $sum: "$payment.sellersPayment.$.amount" ,
这是无效语法,不能使用$符号访问数组元素,
修复很少,
$match
你的条件是正确的
$unwind
解构sellersPayment
数组
$match
再次匹配您的第一阶段条件以过滤 sellersPayment
的子文档
$group
使用字段 payment.sellersPayment.amount
通过 null 和总和
$project
显示必填字段
await Order.aggregate([
$match:
"payment.sellersPayment":
$elemMatch:
seller: ObjectId(user._id),
isPaid: false
,
$unwind: "$payment.sellersPayment" ,
$match:
"payment.sellersPayment.seller": ObjectId(user._id),
"payment.sellersPayment.isPaid": false
,
$group:
_id: null,
confirmedBalance: $sum: "$payment.sellersPayment.amount"
,
$project:
_id: 0,
confirmedBalance: 1
])
Playground
【讨论】:
以上是关于带有 $sum 操作的 Mongodb 位置运算符“$”不起作用的主要内容,如果未能解决你的问题,请参考以下文章
mongoDB,带有 $sum 和 $count 的 mongoose 聚合查询
mongoDB,带有 $sum 和 $count 的 mongoose 聚合查询
如何在 MongoDB C# 驱动程序版本 2 中使用 $ 位置运算符
如何在 MongoDB C# 驱动程序版本 2 中使用 $ 位置运算符