【问题标题】:How to check if collection exists or not MongoDB Golang如何检查集合是否存在 MongoDB Golang
【发布时间】:2018-02-27 19:17:45
【问题描述】:

我是 GO 语言的新手,我正在使用 MongoDB。我正在为 Angular 4 上的应用程序及其前端创建一个后端。我想检查集合是否存在。

这是我的代码,我使用 nil 对其进行了检查。

collection := GetCollection("users")    
fmt.Println("collection", collection)   
if collection == nil {      
   fmt.Println("Collection is empty")   
}

我创建了一个 GetCollection 函数,当我们向它传递一个集合名称时它会返回一个集合。 那么,如果没有集合,我如何检查它是否存在? 我尝试了很多事情,但都失败了。

【问题讨论】:

  • 真正的问题是“为什么它对你很重要?”。您认为需要确定某个集合是否存在的具体原因有哪些?
  • 是的,这对我来说真的很重要。我正在 users 集合中创建 seeds。如果没有 usercollection,我的服务器将首先创建一个集合,然后再创建一个默认用户。
  • 您确实意识到,如果您只是从集合中请求count,那么无论它是否存在,它总是返回一个数字。如此空或不存在将是0。有一个区别,在某些情况下,您可能实际上需要测试集合是否存在。但你的情况似乎不是其中之一。

标签: mongodb go mgo


【解决方案1】:

您可以简单地使用Database.CollectionNames() 方法返回给定数据库中存在的集合名称。它返回一个切片,您必须在其中检查您的收藏是否列出。

sess := ... // obtain session
db := sess.DB("") // Get db, use db name if not given in connection url

names, err := db.CollectionNames()
if err != nil {
    // Handle error
    log.Printf("Failed to get coll names: %v", err)
    return
}

// Simply search in the names slice, e.g.
for _, name := range names {
    if name == "collectionToCheck" {
        log.Printf("The collection exists!")
        break
    }
}

但正如 Neil Lunn 在他的 cmets 中所写,您不应该需要这个。您应该更改逻辑以使用 MongoDB 而不依赖此检查。如果您尝试插入文档,则会自动创建集合,并且从不存在的集合中查询不会产生错误(当然也不会产生结果)。

【讨论】:

  • 所以你的意思是说集合是否存在并不重要。我只需要添加一个文件?对吗?
  • @HabibM.Farooq 没错。如果您尝试将文档插入到不存在的集合中,则会自动为您创建该集合。
  • 感谢您的完美回答,感谢您的帮助。
  • 我想在 MongoDB Atlas 中创建一个配置文件。在第一次执行中我需要创建一个集合,但如果是第二次执行,那么这个集合已经创建了
  • 在代码中: sess := ... // 获取会话 db := sess.DB("") // 获取 db,如果连接 url 中没有给出,则使用 db 名称。我如何获得会话:cliente_local, err := mongo.NewClient(options.Client().ApplyURI(cadena_conexion))?.
猜你喜欢
  • 2022-01-26
  • 2015-11-01
  • 2014-06-30
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 2014-01-28
  • 2022-01-04
相关资源
最近更新 更多