gpt4 book ai didi

node.js - 如何通过过滤器获取所有集合名称?

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:15 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

The <database>.system.namespaces collection contains information about all of the database’s collections. Additional namespace metadata exists in the database.ns files and is opaque to database users.

> 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" } }

关于node.js - 如何通过过滤器获取所有集合名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26051481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com