2017-08-30 8 views
1

J'ai un DB sur MongoDB, avec une collection comme ceci:Rechercher dans une gamme de domaines 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"), 
} 

L'utilisateur saisit un numéro pour valider: 125000, je besoin d'une requête pour obtenir: « Salut Range "document. Comment puis-je faire cela? J'essaie d'éviter le côté du code, mais s'il n'y a pas de choix c'est ok.

Merci!

Répondre

2

Vous pouvez même faire faire sans $ et . Vous avez juste besoin de définir la requête pour trouver un résultat tel que votre nombre est inférieur ou égal à sa fin et supérieur ou égal à son début. Par exemple:

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

Note: Attention, si vous voulez cette gamme pour inclure le début et le numéro de fin, utilisez $lte, $gte. Utiliser $ lt ou $ gt ne l'inclura pas.

+0

Cela fonctionne parfaitement! Je pense que je pensais à une façon plus compliquée de le faire. – jesuscc29

0

Vous pouvez le faire comme ça -

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

Ce n'est pas le cas, j'ai besoin de chercher dans la plage min et max, pas littéralement le nom du document. – jesuscc29

0

Pour éviter la logique qui déterminent que 12500 est Salut Range que vous pourriez faire quelque chose comme ça

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

J'ai essayé, mais je n'ai pas eu le résultat. @Rafael Moreno réponse fonctionne très bien, et est presque le même, mais sans l'explicite '$ and' – jesuscc29

+1

Assez juste. Cela n'a pas fonctionné parce que j'ai mélangé le début et la fin puisque j'ai supposé que le début était inférieur à la fin. Changé cela maintenant. – SJFJ