使用正则表达式搜索MongoDB中的任何值?

时间:2013-01-01 21:55:01

标签: php regex json mongodb mongoose

我对MongoDB和正则表达式都很陌生,所以请耐心等待。 MongoDB文档有一个使用正则表达式进行搜索的示例:

http://docs.mongodb.org/manual/reference/operators/#_S_regex

但是,它仅显示如何搜索预定键的值。 我不确定如何编写查询来搜索集合中的所有值,如果有人可以指出它会很棒。

1 个答案:

答案 0 :(得分:0)

如果您不关心数据库(或性能)的大小,您可能会使用mapReduce函数将数据去规范化为更容易搜索的结构。但是,这将显着增加数据库的大小,因为您将复制该集合的所有数据。

的伪代码:

// recursive
// building a full property path
for(var key in obj) {
    emit(this._id, { orig: obj[key], src: path + "." + key });
    // recursive call emitChildren(path, key)
}

根据数据的复杂程度,这可能是合理的。

或者,您可以使用$where对所有文档的每个键/值执行正则表达式(因为您可以在使用$ where时执行任意JavaScript)。

如果你正在对集合中每个文档中的每个值运行一个正则表达式,那么没有选项可以很好地执行(甚至是内置选项)也不会发挥mongoDB的优势。