$ regex在mongodb中查找包含字符串的文档

时间:2015-04-25 11:20:03

标签: regex mongodb mongodb-query

我正在mongo处理数据库查询,我需要通过定期表达string字段( fieldToQuery )来查询文档。

数据结构就像

{
     fieldToQuery : "4052577300",
     someOtherField : "some value",
     ...
     ...
}

我的值为"804052577300",使用它我必须查询上述文档。

如何使用 $ regex 运算符实现相同功能?

更新

我需要像regex in mongo那样结束。

2 个答案:

答案 0 :(得分:2)

您可以使用fieldToQuery值创建一个正则表达式的反向正则表达式查询,然后根据查询值对其进行测试:

var value = "804052577300";        
db.test.find({
    $where: "new RegExp(this.fieldToQuery + '$').test('" + value + "');" 
});

$where运算符允许您针对集合中的每个文档执行任意JavaScript;其中this是当前文档,表达式的真实结果决定了文档是否应该包含在结果集中。

因此,在这种情况下,会为每个文档的RegExp字段构建一个新的fieldToQuery,并在末尾添加$,以便将搜索锚定到字符串的末尾。然后调用正则表达式的test方法来测试value字符串是否与正则表达式匹配。

$where字符串在服务器端进行评估,因此必须在客户端评估value的值,方法是将其值直接包含在$where字符串中。

请注意,$where查询可能会非常慢,因为它们无法使用索引。

答案 1 :(得分:1)

你可以这样做:

.item-icon-right .icon {
  /* right: 11px; */
  display: inline-block;
  float: right;
}
.item-icon-left .icon, .item-icon-right .icon {
  display: -webkit-box;
  display: -webkit-flex;
  display: -moz-box;
  display: -moz-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  -webkit-align-items: center;
  -moz-align-items: center;
  align-items: center;
  /* position: absolute; */
  /* top: 0; */
  height: 100%;
  font-size: 32px;
}

上面的正则表达式模式等同于SQL的LIKE操作:

db.collection.find({ fieldToQuery: /4052577300$/})