在 MongoDB 查找查询期间将字符串值解析为整数

Parse string value into integer during MongoDB find query

我需要能够解析深层嵌套的字符串值,以便能够找到比我的请求查询中更大的金额。我发现 $expr 运算符应该对此有帮助,但是当我尝试实现它时它给了我

"message" : "unknown operator: $expr",

这是我的代码:

db.OrderAttributes.find({
    InfluencedAttributes: {$elemMatch: {
        LexisAttributes:{$elemMatch: {
            $expr: { $gt: [ {$toDouble: "$MyAttributes.MyField"}, 500]}
        }}
    }}
}

我要比较的值在这里

InfluencedAttributes.0.LexisAttributes.0.MyAttributes.MyField = "20000"

查找文档的修剪版本:

db.OrderAttributes.insertOne({
    "InfluencedAttributes" : [
        {
            "LexisAttributes" : [
                {
                    "MyAttributes" : {
                        "MyValue" : "20000"
                    }
                },
                {
                    ...
                },
                {
                    ...
                }
            ]
        }
    ]
}})

问题是 $expr 不是 $elemMatch 的有效查询,但您仍然有两种方法可以达到所需的结果:

第一个选项:

db.OrderAttributes.find({"$expr": { "$gt": [ { "$toDouble": "$InfluencedAttributes.0.LexisAttributes.0.MyAttributes.MyField"}, 500 ] } } );

性能:用于集合扫描的 COLLSCAN。

第二个选项:

db.OrderAttributes.find({ "InfluencedAttributes.0.LexisAttributes.0.MyAttributes.MyField": {$regex: /^([5-9]\d{2,}|\d{4,})/ } } );

性能:用于扫描索引键的 IXSCAN。