Debugging 如何调试MongoDB查询?

Debugging 如何调试MongoDB查询?,debugging,mongodb,Debugging,Mongodb,我有一个正在运行的MongoDB查询,它不会收回我知道应该收回的记录。我过滤两件事:类别和描述(通过包含/类似正则表达式)。如果我根据类别进行搜索,则该类别中的所有记录都会返回(包括问题记录),但如果我输入描述,则无法返回该记录。其他与描述文本匹配的记录会返回,但由于某种原因,无论我输入了什么,我都无法让这条记录返回描述条件。这很奇怪 如何使用MongoDB调试这样的东西?我的问题很简单: var match = {}; var category = "hardware" if (catego

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

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

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使搜索不区分大小写


那么,我如何才能找出为什么这个查询无法生成一个与它非常匹配的项呢?

好吧,这可能不是原因,但regex有点奇怪。您应该能够指定以下内容:

match.Description=newregexp(“/”+searchText+“/”)

*
意味着匹配任意字符任意次数-除非您尝试将所有字符与文本匹配,并将其作为更复杂的正则表达式的一部分使用,否则您不需要它

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

{
    "_id" : ObjectId("503fab7bf6a278b7bda257d2"),
    "category" : "hardware",
    "Description" : "blah ceramic blah"
}
这符合:

mongos> db.foo.find({"Description" : /ceramic/}).pretty()
{
    "_id" : ObjectId("503fab7bf6a278b7bda257d2"),
    "category" : "hardware",
    "Description" : "blah ceramic blah"
}

您还可以查看和观察您的程序发送到MongoDB的内容(请小心,评测会产生开销)。您希望级别2能够查看页面上提到的所有查询。

该文档必须与“陶瓷”查询中不会返回的文档有所不同。你能把那张单据加上去吗?