2017-08-30 66 views
1

一系列领域内的搜索我对MongoDB的一个数据库,以这样一个集合:MongoDB的

{ 
    "_id" : ObjectId("59a64b4cfb80146432aff6ac"), 
    "name": "Mid Range", 
    "end" : NumberLong("50000"), 
    "start" : NumberLong("10000"), 
}, 
{ 
    "_id" : ObjectId("59a64b4cfb80146432aff6ac"), 
    "name": "Hi Range", 
    "end" : NumberLong("100000"), 
    "start" : NumberLong("150000"), 
} 

用户输入一个号码来验证:125000,我需要一个查询来获取:“嗨范围“文件。 我该怎么做?我试图避免代码方面,但如果没有选择就没关系。

谢谢!

回答

2

你甚至可以凑合没有$和。您只需设置查询来查找结果,以便您的号码小于或等于其结尾并且大于或等于其开头。例如:

db.collection.find({start: {$lte: 125000}, end: {$gte: 125000}}) 

注意:小心,如果你想要那个范围,包括起始和结束号码,用$lte$gte。使用$ lt或$ gt不会包含它。

+0

这工作完美!我想我正在想一个更复杂的方式来做到这一点。 – jesuscc29

0

你可以做到这样的 -

db.find({name:/Hi Range/}) // regular Expression. 
+0

事实并非如此,我需要在最小和最大范围内搜索,而不是字面上的文档名称。 – jesuscc29

0

为了避免逻辑确定12500是高范围,你可以做这样的事情

db.collection.find({ $and: [ { start: { $lte: 125000 } }, { end: { $gt: 12500 } } ] }) 
+0

我试过了,但我没有得到结果。 @Rafael莫雷诺答案工作正常,并且几乎相同,但没有明确的'$和' – jesuscc29

+1

不够公平。它不起作用,因为我开始和结束混在一起,因为我认为开始时比结束还要少。现在改变了。 – SJFJ