如何通过过滤器获取所有集合名称?

时间:2014-09-26 03:13:47

标签: node.js mongodb

最近我想使用mongodb驱动程序通过过滤器获取所有集合名称。

"Admin",
"Config",
"Event",
"event12345678901234567890123456789012",
"system.indexes"

上面是所有集合名称,但我只想显示以'event'开头的集合,我发现documents有一个过滤器参数,但文档没有显示任何用法和过滤规则,所以有谁知道如何使用它?

1 个答案:

答案 0 :(得分:1)

由于getCollectionNames()基于查询db.system.namespaces

  

< database> .system.namespaces集合包含有关的信息   所有数据库的集合。其他命名空间元数   存在于database.ns文件中,对数据库用户不透明。

> db.getCollectionNames;
function (){
    var all = [];

    var nsLength = this._name.length + 1;

    var c = this.getCollection( "system.namespaces" ).find();
    while ( c.hasNext() ){
        var name = c.next().name;

        if ( name.indexOf( "$" ) >= 0 && name.indexOf( ".oplog.$" ) < 0 )
            continue;

        all.push( name.substring( nsLength ) );
    }

    return all.sort();
}

您可以使用$regex手动过滤db.system.namespaces

db.system.namespaces.find({'name': {"$regex": /^foo.Event\w*$/, "$options": "-i"}});

其中foo是数据库名称,-i有助于进行不区分大小写的搜索。

演示(来自"mongo shell"):

> db.system.namespaces.find();
{ "name" : "foo.system.indexes" }
{ "name" : "foo.system.users.$_id_" }
{ "name" : "foo.system.users.$user_1_userSource_1" }
{ "name" : "foo.system.users" }
{ "name" : "foo.foo.$_id_" }
{ "name" : "foo.foo" }
{ "name" : "foo.test.$_id_" }
{ "name" : "foo.test", "options" : { "create" : "test" } }
{ "name" : "foo.Config.$_id_" }
{ "name" : "foo.Config", "options" : { "create" : "Config" } }
{ "name" : "foo.Event.$_id_" }
{ "name" : "foo.Event", "options" : { "create" : "Event" } }
{ "name" : "foo.event12345678901234567890123456789012.$_id_" }
{ "name" : "foo.event12345678901234567890123456789012", "options" : { "create" : "event12345678901234567890123456789012" } }
{ "name" : "foo.Admin.$_id_" }
{ "name" : "foo.Admin", "options" : { "create" : "Admin" } }

> db.system.namespaces.find({'name': {"$regex": /^foo.Event\w*$/, "$options": "-i"}});
{ "name" : "foo.Event", "options" : { "create" : "Event" } }
{ "name" : "foo.event12345678901234567890123456789012", "options" : { "create" : "event12345678901234567890123456789012" } }