$add 仅支持数字或日期类型,不支持数组在 Mongoose 中递增时出错
Posted
技术标签:
【中文标题】$add 仅支持数字或日期类型,不支持数组在 Mongoose 中递增时出错【英文标题】:$add only supports numeric or date types, not array Error when Incrementing in Mongoose 【发布时间】:2020-08-20 05:06:15 【问题描述】:我有一个如下所示的文档:
"_id": ObjectId("1111"),
"products":[
_id:'abc',
quantity:3,
_id:'xyz',
quantity:5
]
我需要将子文档 products.quantity 增加一定数量。
这是我迄今为止尝试过的
Counter.findOneAndUpdate(
"_id": ObjectId("1111"), "products._id": 'abc' ,
[
$addFields:
'products.quantity': $add: [ "$products.quantity", 7 ]
])
当我运行它时,我希望数量为 10,但我收到一个错误,提示 $add 仅支持数字或日期类型,而不支持数组
现在我该如何实现呢?
【问题讨论】:
是否要更新 products 数组中所有元素的数量? @whoami 不,它只是数组中与过滤器匹配的一个元素,即 "products._id": 'abc' 如我的问题所示 【参考方案1】:您可以使用array filters 按所需位置进行过滤,并使用$inc 来增加值,如下所示:
Counter.findOneAndUpdate(
_id: "1111",
"products._id": "abc"
,
$inc:
"products.$[element].quantity": 7
,
arrayFilters: [
"element._id": "abc"
]
)
例如here
顺便说一句,你为什么得到$add only supports numeric or date types, not array
的问题是因为"$products.quantity"
都是数组中的值。在您的示例中,值为[quantity:3,quantity:5]
。然后你必须过滤你想要得到数字的确切值,而不是数组。
【讨论】:
以上是关于$add 仅支持数字或日期类型,不支持数组在 Mongoose 中递增时出错的主要内容,如果未能解决你的问题,请参考以下文章
无法创建“System.Object”类型的常量值。此上下文仅支持基元类型或枚举类型
找不到“object”类型的不同支持对象“[object Object]”。 NgFor 仅支持绑定到 Iterables,例如带有异步管道的数组