MongoDB的总查询的Int64

让说我的MongoDB的数据存储一些数据与诠释MongoDB的总查询的Int64

  1. 编号:850531015931
  2. 编号:860338053336
  3. 编号: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

回到顶部