在MongoDB Query中构建此LEFT()“SQL”?

时间:2011-07-13 21:08:46

标签: mongodb mongodb-.net-driver

以“1234567890”格式提供带有 PhoneNumber BsonDocument集合。此SQL获取所有PhoneNumbers,区号为300到399;

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

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

3 个答案:

答案 0 :(得分:4)

如果您只想要从号码'3'开始的电话号码,您可以使用 @mstearn 的明智决定,这里只是c#实现:

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

但是,如果您需要查询范围345 - 369中的前3个数字以使其正常工作(没有慢速运算符:$where$regex),您可以先创建其他字段并存储在那里3电话的号码(区号)。然后使用 @yi _H提出的查询,这里再次使用c#driver实现:

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

不关心mongodb中的额外字段 - 这是常见做法。在查询期间,额外的字段通常比任何计算工作得快。

答案 1 :(得分:1)

{'PhoneNumber': {'$gte': '300', '$lt': '400'}}

答案 2 :(得分:1)

{'PhoneNumber': /^3/ } or {'PhoneNumber': {'$regex': '^3'}}