MongoDB的总查询的Int64
让说我的MongoDB的数据存储一些数据与诠释MongoDB的总查询的Int64
- 编号:850531015931
- 编号:860338053336
- 编号:859923992712
现在我想查询聚合与正则表达式 那些数字以85开头,我如何做到这一点与聚合函数?
回答:
首先,你必须使用$ SUBSTR运营商整数转换成字符串比使用$正则表达式操作
db.collection.aggregate([{$project :{numstring : {$substr :["$number",0,12]}}},{$match :{"numstring":{$regex : /^8.5/}}}])
回答:
$substr可用于$project阶段将num转换为字符串值。然后你可以在正则表达式中使用$match阶段。
项目阶段:
{ $project:{
numAsString: { $substr : ["$num", 0, -1 ] }
}
}
比赛阶段:
{ $match : { numAsString: { $regex: /^85.*/ } }
}
回答:
虽然这可以通过正则表达式来完成,我想建议的替代方法。正则表达式的问题是它不允许你索引元素。因此,随着收藏大小的增加,您的查询将变得越来越慢。
你可以去为基础,并做以下检查
{$or: [ {$and: [ {$gte: ['$num', 85] }, {$lte: ['$num', 85] } ]},
{$and: [ {$gte: ['$num', 850] }, {$lte: ['$num', 859] } ]},
{$and: [ {$gte: ['$num', 8500] }, {$lte: ['$num', 8599] } ]},
{$and: [ {$gte: ['$num', 85000] }, {$lte: ['$num', 85999] } ]},
{$and: [ {$gte: ['$num', 850000] }, {$lte: ['$num', 859999] } ]},
{$and: [ {$gte: ['$num', 8500000] }, {$lte: ['$num', 8599999] } ]},
{$and: [ {$gte: ['$num', 85000000] }, {$lte: ['$num', 85999999] } ]},
{$and: [ {$gte: ['$num', 850000000] }, {$lte: ['$num', 859999999] } ]},
{$and: [ {$gte: ['$num', 8500000000] }, {$lte: ['$num', 8599999999] } ]},
{$and: [ {$gte: ['$num', 85000000000] }, {$lte: ['$num', 85999999999] } ]},
]}
坚持做下去,直到你在num
达到最大可能的值。对不起,难看的代码,但它应该运行更快。
回答:
有没有在您的特定使用正则表达式是没有意义的执行$匹配 funtion案件。至于其他人已经指出转换为字符串可以用$substr做,但它需要的过滤所有的是一个标准等于比较:
db.collection.aggregate([{ $addFields: {
"firstTwoDigits": { // create a new field called "firstTwoDigits"
$substr: ["$num", 0, 2] // extract the first two digits only
}
}
}, {
$match: {
"firstTwoDigits": "85" // simple filter
}
}])
以上是 MongoDB的总查询的Int64 的全部内容, 来源链接: utcz.com/qa/260884.html