【问题标题】:mongodb substr string from behind and compare从后面的mongodb substr字符串并进行比较
【发布时间】:2015-09-15 15:41:55
【问题描述】:

我想用 mongodb 客户端这样查询数据:

{ "_id" : "1231220140713" }
{ "_id" : "12320140714" },
{ "_id" : "1320140714" },
{ "_id" : "115320140714" }

得到数据gte 20140714的结果:

{ "_id" : "12320140714" },
{ "_id" : "1320140714" },
{ "_id" : "115320140714" }

$_id 后八位字符串为日期类型

如何使用db.xxx.find()db.xxx.aggregate()处理

【问题讨论】:

标签: javascript mongodb


【解决方案1】:

聚合的$substr 不会从字符串中反向读取:

如果是负数,$substr 返回一个从指定索引开始的子字符串,包括字符串的其余部分。

因此,JavaScript 评估的结果是:

db.collection.find(function() { return this._id.substr(-8) >= "20140714" })

不是最好的,但目前没有从字符串末尾返回的本地运算符条件。

【讨论】:

  • 做的很好,如果我可以通过索引来做以提高效率
  • @TheCatCanCanACan 抱歉,这对于 $where 的 JavaScript 评估和您在计算匹配中的基本要求都是一个问题。更好的方法是将该数据存储在一个单独的字段中,最好是作为Date 对象,因为它会占用更少的空间。当然,您可以在该字段上建立索引以提高性能。但是当没有一个可靠的字符串来匹配“从一开始”(所以即使是正则表达式在这里也无济于事),那么你就不能真正从索引中获得优势。
  • 如果我使用正则表达式匹配字符串,那我该怎么做呢?正则表达式是 [0-9]{8}$ ?我怎样才能得到匹配值比较日期
  • @TheCatCanCanACan 在这种情况下对性能没有影响。您只能从锚定到字符串 ^ 的“开始”中获得好处,并且与数字相比,“最后八个字符”几乎没有区别。正如我所说,您真正的解决方案是存储在单独的字段中。
猜你喜欢
  • 1970-01-01
  • 2013-05-23
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多