2011-07-13 3 views
1

BsonDocumentコレクションを持っています。電話番号は "1234567890"形式です。このSQLは、300〜399のエリアコードを持つすべてのPhoneNumbersを取得します。MongoDBクエリでこのLEFT() "SQL"をビルドしますか?

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

MongoDBでこれを行うにはどうすればよいですか?可能であればMongoDB.Driver.Buildersを使用したいと思います。

+0

LEFTは、文字列の最初の3文字の部分文字列です。 –

+0

ありがとうございますが、どうすれば使用できますか?このような? var gte = Query.GTE( "LEFT(PhoneNumber、3)"、 "300"); – CmdrTallen

答えて

4

あなただけの電話番号は、番号から開始したい場合は「3」あなただけちょうど#実現cはここ@mstearn、のスマートな意思決定を使用することができます。

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

しかし、発言をすることができますあなたが追加のフィールドを作成し、そこに電話の最初の3つの番号(市外局番)を保存することができます(遅いオペレータなし:$where$regex)を動作させるために範囲345 - 369の最初の3つの数字を照会する必要があれば。そして@yi _Hによって提案されたクエリを使用し、ここで再び#ドライバの実現にC:

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

MongoDBの約余分フィールドを気にしないでください - それは一般的な方法です。余分なフィールドは通常、クエリ中にどの計算よりも速く動作します。

+0

冗長な答えをありがとう! – CmdrTallen

+0

あなたは歓迎です –

1
{'PhoneNumber': {'$gte': '300', '$lt': '400'}} 
1
{'PhoneNumber': /^3/ } or {'PhoneNumber': {'$regex': '^3'}} 
関連する問題