【问题标题】:Build this LEFT() "SQL" in MongoDB Query?在 MongoDB 查询中构建这个 LEFT()“SQL”?
【发布时间】:2011-07-13 21:08:46
【问题描述】:

拥有一个BsonDocument 集合,其中PhoneNumber 格式为“1234567890”。该 SQL 获取区号在 300 到 399 之间的所有电话号码;

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

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

【问题讨论】:

  • LEFT 是字符串前三个字符的子字符串。
  • 谢谢,但我该如何使用呢?像这样? var gte = Query.GTE("LEFT(PhoneNumber,3)", "300");

标签: mongodb mongodb-.net-driver


【解决方案1】:

如果您只想要从数字“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 中的 extra 字段——这是常见的做法。在查询期间,额外字段的运行速度通常比任何计算都快。

【讨论】:

  • 感谢您的详细回答!
【解决方案2】:
{'PhoneNumber': {'$gte': '300', '$lt': '400'}}

【讨论】:

    【解决方案3】:
    {'PhoneNumber': /^3/ } or {'PhoneNumber': {'$regex': '^3'}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      相关资源
      最近更新 更多