最近我想使用mongodb驱动程序通过过滤器获取所有集合名称。
"Admin",
"Config",
"Event",
"event12345678901234567890123456789012",
"system.indexes"
上面是所有集合名称,但我只想显示以'event'开头的集合,我发现documents有一个过滤器参数,但文档没有显示任何用法和过滤规则,所以有谁知道如何使用它?
答案 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" } }