在 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。
我需要能够解析深层嵌套的字符串值,以便能够找到比我的请求查询中更大的金额。我发现 $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。