微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我需要能够解析深度嵌套的字符串值才能找到比我的请求查询中更大的数量。我发现 $expr 运算符应该在这方面有所帮助,但是当我尝试实现它时,它给了我

"message" : "未知操作符:$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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。