首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调试MongoDB查询?

如何调试MongoDB查询?
EN

Stack Overflow用户
提问于 2012-08-30 21:53:40
回答 1查看 7K关注 0票数 2

我有一个正在运行的MongoDB查询,它没有拉回我知道它应该拉回的记录。我根据两件事进行过滤:类别和描述(通过一个包含/喜欢的正则表达式)。如果基于类别进行搜索,则返回该类别中的所有记录(包括问题记录),但如果添加描述,则无法返回该记录。与描述文本匹配的其他记录将返回,但由于某种原因,无论我输入什么,我都无法使这一条记录返回描述条件。这是非常奇怪的。

如何用MongoDB来调试这样的东西呢?我的问题很简单:

代码语言:javascript
复制
var match = {};

var category = "hardware"
if (category)
    match.Category = category;

var searchText = "ceramic"
if (searchText)
{
    match.Description = new RegExp("/.*" + searchText + ".*/");
}

collection.find(match).toArray(function(err, items)
{
    response.send(items);
});

我想要返回的项目在硬件类别中,当searchText为"“时,它将返回。它的描述中有“陶瓷”一词,但当searchText是“陶瓷”(或在其描述中找到的任何数量的其他单词)时,该项目就不会返回。其他在他们的描述中有“陶瓷”一词的人这样做,但不是那个,当然那个项目的结构与其他项目没有什么不同。它真的应该通过比赛。

大小写是正确的(“陶瓷”在描述和过滤器中都是低的),我还尝试了/i来使搜索不区分大小写。

那么,我如何才能找出为什么这个查询不能生成一个非常清楚地匹配它的条目呢?

EN

回答 1

Stack Overflow用户

发布于 2012-08-31 02:19:13

好吧,这可能不是这里的原因,但是正则表达式有点奇怪。您应该能够指定以下内容:

match.Description =新建RegExp("/“+ searchText + "/");

.*意味着匹配任何字符任意次-除非您试图贪婪地匹配文本之前的所有内容,并将其用作更复杂的正则表达式的一部分,否则您不需要它。

在调试方面,确定查询在MongoDB中应该是什么样子,并确保它在shell中工作。下面是一个快速示例文档:

代码语言:javascript
复制
{
    "_id" : ObjectId("503fab7bf6a278b7bda257d2"),
    "category" : "hardware",
    "Description" : "blah ceramic blah"
}

这与以下内容匹配:

代码语言:javascript
复制
mongos> db.foo.find({"Description" : /ceramic/}).pretty()
{
    "_id" : ObjectId("503fab7bf6a278b7bda257d2"),
    "category" : "hardware",
    "Description" : "blah ceramic blah"
}

您还可以通过turn on profiling和监视来查看程序发送到MongoDB的内容(要小心,分析有开销)。您将希望level 2能够看到页面上提到的所有查询。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12198508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档