【问题标题】:regex use with $where on mongoose/mongoDB正则表达式在 mongoose/mongoDB 上与 $where 一起使用
【发布时间】:2015-10-22 18:20:10
【问题描述】:

我正在尝试使用 mongoose ORM 从 mongoDB 中提取结果。 以下代码部分完美运行并返回了“测试”的完全匹配

db.getCollection('cards').find({
    $where: "this.name=='Test'"
})

我实际上想提取“Test”的不区分大小写的匹配项。

以下一项有效,

db.getCollection('cards').find({"name":/test/i})

但我想在 $where 上使用正则表达式,如下所示,

db.getCollection('cards').find({
    $where: "this.name=='/Test/i'"
})

有人可以就如何在 $where 中处理正则表达式提供一些启示或指导吗?

【问题讨论】:

  • @npinti 这不是重复的,因为我的要求是使用 $where 关键字
  • @Cling:我不确定,所以我没有投票结束。感谢您的指正。评论已删除。
  • @Cling 您可能正在“使用”$where,但您可能不应该这样做,除非您需要更多基于 JavaScript 的逻辑而不是您正在做的事情。 JavaScript 评估可以“仅”扫描整个集合。一个正确的“$regex”查询至少可以扫描整个索引。如果您包含插入符号^,则索引甚至更少
  • 投反对票的原因是什么??

标签: regex node.js mongodb mongoose


【解决方案1】:
db.getCollection('cards').find({"name": /Test/i})

上面的查询会给你任何包含“test”的名字

如果您想使用 $where 进行搜索

使用这个:

db.getCollection('cards').find({ $where: "/Test/.test(this.name)" })

恕我直言,您可以使用 $regex 本身。

{ <field>: { $regex: /pattern/, $options: '<options>' } }

示例:

db.getCollection('cards').find({ name: { $regex: /Test/, $options: 'i' } })

【讨论】:

  • 工作就像一个魅力。这正是我正在寻找的。感谢您的帮助。
  • 嘿@Cling 只是出于我的好奇,你用的是哪一个?
  • 我用过,db.getCollection('cards').find({ $where: "/Test/i.test(this.name)" }) 带$where的那个,我需要在此之后进行更多操作...
  • @Cling 很高兴知道我提供了帮助 :)
猜你喜欢
  • 1970-01-01
  • 2017-12-22
  • 2015-12-18
  • 2016-12-29
  • 2011-06-19
  • 2012-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多