【问题标题】:Check object existence in mongo using gopkg.in/mgo.v2使用 gopkg.in/mgo.v2 检查 mongo 中的对象是否存在
【发布时间】:2015-12-24 15:52:26
【问题描述】:

我正在寻找方便的方法来检查对象是否已存在于集合中。目前我找到的唯一方法是

type result interface{}
var res result

err := col.Find(bson.M{"title": "title1"}).One(&res)
if err != nil {
    if err.Error() == "not found" {
        log.Println("No such document")
    } else {
        log.Println("err occured", err)
    }
}

我不想创建变量 res,如果对象存在,它可能是非常重的文档,包含很多字段。 我希望有另一种方式,一些 Check() 函数只会返回 bool 值.. 基本上我只需要知道已经存储在集合中的对象,我不需要它自己

【问题讨论】:

  • 以后对这里的任何人也请确保您使用 mgo.ErrNotFound 而不是 == "not found"

标签: mongodb go


【解决方案1】:
count, err = collection.Find(bson.M{field: value}).Count()

【讨论】:

  • 注意:您必须先设置 db.SetSafe(&mgo.Safe{}) 才能使其工作 - 否则它将始终返回 0 和 nil!
  • 这不是一个好办法,如果你有几百万个文档,计算整个集合需要很高的成本和太多的时间,最后你真的不在乎有多少文件,但只要有文件存在。
【解决方案2】:

你必须使用 $exists

语法:{ 字段:{ $exists: } }

更多详情

http://docs.mongodb.org/manual/reference/operator/query/exists/

【讨论】:

  • 我需要检查FIELD值为X的对象是否已经存在; $exists 将找到具有 FIELD 的对象,无论其值如何。再说一次,我只需要知道该对象已经在数据库中,我不需要它自己
  • 您的意思是要检查集合中是否存在具有特定值的字段?
  • 是的,你比我做得更好:)
  • 你可以简单地使用大于0的count这里是代码db.colleaction.count({filed:value})>0
  • db.colleaction.count({filed:value})>0 我们如何在 golang 中使用 gopkg.in/mgo.v2 做到这一点?
【解决方案3】:

Official Mongo Driver 中,您可以使用 CountDocuments 函数获取具有特定键的文档数:

count, err := collection.CountDocuments(context.TODO(), bson.D{{"key", "value"}})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 2012-07-27
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多