登录
首页 >  Golang >  Go问答

MongoDB 列出 Go 中给定前缀的数据库

来源:stackoverflow

时间:2024-04-18 13:21:36 344浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《MongoDB 列出 Go 中给定前缀的数据库》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

问题

如何仅列出具有给定前缀 (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)
}

输出:

[管理栏配置本地 prefix_bar prefix_foo]

预期输出:

[prefix_bar prefix_foo]

奖金:

  1. 在我的例子 foo 中,可以在不定义新 struct 的情况下创建数据库吗?
  2. 我的目标是仅对具有前缀的数据库运行查询,因此也许存在比列出数据库然后对每个数据库运行查询更好的解决方案?

解决方案


只需按 name 属性进行过滤即可,该属性表示数据库名称。要列出以给定前缀开头的数据库,您可以使用正则表达式 ^prefix_

filter := bson.M{"name": primitive.Regex{Pattern: "^prefix_"}}

其他过滤器选项列于 listDatabases command 页面:

您可以在 listdatabases 的输出中的任何字段上指定条件:

  • name
  • sizeondisk
  • empty
  • shards

并且您可以使用空的 bson.m{} 插入空文档(当然会添加 _id)。

终于介绍完啦!小伙伴们,这篇关于《MongoDB 列出 Go 中给定前缀的数据库》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>