mongodb 将 $lte 与 $indexOfArray 一起使用

Fre*_*Box 5 mongoose mongodb aggregation-framework

与模型的集合

{
    stack: [{mean: 3.5}]
}
Run Code Online (Sandbox Code Playgroud)

如何查询平均值小于 4.38 的堆栈数组索引?

db.stacks.aggregate([
    {
        $project: {
            index: { $indexOfArray: ['$stack', {mean: { $lte: 4.38 }}] },
        },
    },
]);
Run Code Online (Sandbox Code Playgroud)

我收到此错误:{

    "ok" : 0,
    "errmsg" : "Expression $lte takes exactly 2 arguments. 1 were passed in.",
    "code" : 16020,
    "codeName" : "Location16020"
}
Run Code Online (Sandbox Code Playgroud)

编辑:

这不会给我错误,但也不匹配任何内容

db.mean.aggregate([
    {
        $project: {
            size: { $size: '$stack' },
            index: { $indexOfArray: ['$stack', {$lte: ['$mean', 4.38] } ] },
        },
    },
])
Run Code Online (Sandbox Code Playgroud)

mic*_*ckl 5

您可以在 的每个元素上运行$mapstack来获取布尔值,然后运行​​$indexOfArray来获取第一个值的索引true-1如果没有匹配的元素,你会得到,尝试:

db.col.aggregate([
    {
        $project: {
            index: {
                $indexOfArray: [
                    { $map: { input: "$stack", in: { $lt: [ "$$this.mean", 4.0 ] } } },
                    true
                ]
            }
        }
    }
])
Run Code Online (Sandbox Code Playgroud)