2011-07-13 28 views
1

BsonDocument集合電話號碼在「1234567890」格式。這個SQL獲取所有電話號碼的區號在300到399之間;在MongoDB Query中構建這個LEFT()「SQL」?

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

我該如何在MongoDB中執行此操作?如果可能,我想使用MongoDB.Driver.Builders

+0

LEFT是串的前三個字符的子串。 –

+0

謝謝,但我該如何使用它?喜歡這個? var gte = Query.GTE(「LEFT(PhoneNumber,3)」,「300」); – CmdrTallen

回答

4

如果你只是想電話號碼,那是從數字開頭的 '3',你可以只使用@mstearn的聰明的決定,這裏只是C#實現:

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

但可以說,如果您需要查詢範圍345 - 369中的前3個數字以使其工作(沒有慢速運營商:$where,$regex),您可以創建附加字段並在那裏存儲手機的前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'}}