【发布时间】:2020-12-06 00:27:45
【问题描述】:
考虑下面的 Mongodb 查询。
db.groups.aggregate([{
$match: {
_id: {
$in: [220]
},
active: true
}
},
{
$project: {
myArr: {
$slice: ["$arr", -1, 0]
},
name: 1
}
}]).pretty()
当我执行这个查询时遇到错误:
2020-12-05T19:16:43.002-0500 E QUERY [js] uncaught exception: Error: command failed: {
"operationTime" : Timestamp(1607213793, 1),
"ok" : 0,
"errmsg" : "Third argument to $slice must be positive: 0",
"code" : 28729,
"codeName" : "Location28729",
"$clusterTime" : {
"clusterTime" : Timestamp(1607213793, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
} : aggregate failed :
根据 $slice 文档,https://docs.mongodb.com/manual/reference/operator/aggregation/slice/ 如果指定了第二个参数“位置”,则 $slice 聚合运算符的第三个参数 (“n”) 不能为负数。我将第三个参数值计算为 0,这意味着,我期望 0 个数组元素作为结果。但是,我遇到 errmsg" : "$slice 的第三个参数必须是正数:0"。
如果我的理解不正确,请提出建议,因为查询没有按我的预期执行。
【问题讨论】:
-
如果你想要一个空数组,为什么要使用
$slice? -
0 不是硬编码值,我计算为 0 ,为简单起见,我硬编码为 0。我使用一些逻辑来计算要从数组中提取的数字元素。
标签: mongodb aggregation-framework