2011-07-13 4 views
1

Avoir une collection BsonDocument avec PhoneNumber au format "1234567890". Ce SQL obtient tous les PhoneNumbers avec les codes de zone entre 300 et 399;Construire cette gauche() "SQL" dans MongoDB Query?

WHERE (LEFT(PhoneNumber,3) BETWEEN '300' AND '399') 

Comment est-ce que je ferais ceci dans MongoDB? Je voudrais utiliser le MongoDB.Driver.Builders si possible.

+0

LEFT est la sous-chaîne pour les trois premiers caractères de la chaîne. –

+0

Merci, mais comment l'utiliser? Comme ça? var gte = Query.GTE ("LEFT (PhoneNumber, 3)", "300"); – CmdrTallen

Répondre

4

Si vous voulez juste le numéro de téléphone qui est commence à partir du numéro '3' vous pouvez simplement utiliser décision intelligente de @mstearn, ici juste C# réalisation:

var query = Query.EQ("PhoneNumber", new BsonRegularExpression("^3")); 

Mais laisse dire si vous avez besoin d'interroger les 3 premiers numéros dans la plage 345 - 369 pour le faire fonctionner (sans opérateurs lents: $where, $regex) vous pouvez créer un champ supplémentaire et y stocker les 3 premiers chiffres (indicatif régional) du téléphone. Et puis utilisez la requête proposée par @yi _H, là encore C# réalisation du pilote:

var query = Query.GTE("PhoneAreaCode", 345).LTE(369); 

Ne vous préoccupez pas champ supplémentaire dans MongoDB - il est pratique courante. Champs supplémentaires fonctionnant habituellement plus vite que tout calcul lors de l'interrogation.

+0

Merci pour la réponse verbeuse! – CmdrTallen

+0

vous êtes les bienvenus –

1
{'PhoneNumber': {'$gte': '300', '$lt': '400'}} 
1
{'PhoneNumber': /^3/ } or {'PhoneNumber': {'$regex': '^3'}}