MongoDB 在 Go 中列出具有给定前缀的数据库
MongoDB list databases with given prefix in Go
问题
如何仅列出具有给定前缀 (prefix_
) 的数据库?
示例:
package main
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"log"
)
type foo struct {
Value string
}
func main() {
clientOptions := options.Client().ApplyURI("mongodb://10.0.12.76:27018")
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
log.Fatal(err)
}
db := [3]string{"prefix_foo", "prefix_bar", "bar"}
for _, element := range db {
_, err := client.Database(element).Collection("placeholder").InsertOne(context.TODO(), foo{"sth"})
if err != nil {
log.Fatal(err)
}
}
filter := bson.D{{}}
dbs, err := client.ListDatabaseNames(context.TODO(), filter)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", dbs)
}
输出:
[admin bar config local prefix_bar prefix_foo]
预期输出:
[prefix_bar prefix_foo]
奖金:
- 在我的例子中,可以在不定义新
struct
的情况下创建数据库 foo
?
- 我的目标是 运行 仅使用前缀查询数据库,因此可能存在比列出数据库然后 运行 每个数据库查询更好的解决方案?
只需按 name
属性 过滤,它表示数据库名称。要列出以给定前缀开头的数据库,您可以使用正则表达式 ^prefix_
:
filter := bson.M{"name": primitive.Regex{Pattern: "^prefix_"}}
listDatabases
command 页面上列出了其他过滤器选项:
You can specify a condition on any of the fields in the output of listDatabases
:
name
sizeOnDisk
empty
shards
也可以使用空的bson.M{}
插入空文档(_id
当然会加)
问题
如何仅列出具有给定前缀 (prefix_
) 的数据库?
示例:
package main
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"log"
)
type foo struct {
Value string
}
func main() {
clientOptions := options.Client().ApplyURI("mongodb://10.0.12.76:27018")
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
log.Fatal(err)
}
db := [3]string{"prefix_foo", "prefix_bar", "bar"}
for _, element := range db {
_, err := client.Database(element).Collection("placeholder").InsertOne(context.TODO(), foo{"sth"})
if err != nil {
log.Fatal(err)
}
}
filter := bson.D{{}}
dbs, err := client.ListDatabaseNames(context.TODO(), filter)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", dbs)
}
输出:
[admin bar config local prefix_bar prefix_foo]
预期输出:
[prefix_bar prefix_foo]
奖金:
- 在我的例子中,可以在不定义新
struct
的情况下创建数据库foo
? - 我的目标是 运行 仅使用前缀查询数据库,因此可能存在比列出数据库然后 运行 每个数据库查询更好的解决方案?
只需按 name
属性 过滤,它表示数据库名称。要列出以给定前缀开头的数据库,您可以使用正则表达式 ^prefix_
:
filter := bson.M{"name": primitive.Regex{Pattern: "^prefix_"}}
listDatabases
command 页面上列出了其他过滤器选项:
You can specify a condition on any of the fields in the output of
listDatabases
:
name
sizeOnDisk
empty
shards
也可以使用空的bson.M{}
插入空文档(_id
当然会加)