使用gopkg.in/mgo.v2检查mongo中的对象是否存在

Kai*_*ign 6 go mongodb

我正在寻找方便的方法来检查对象是否已经存在于集合中.现在,我找到的唯一方法是

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

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

小智 9

count, err = collection.Find(bson.M{field: value}).Count()
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个好方法,如果你有数百万个文档,那么统计整个集合会花费很高的成本和太多的时间,而且到最后,你真的不关心有多少文档,而只是如果存在任何文档。 (2认同)

Roh*_*ain 6

你必须使用$ exists

语法:{field:{$ exists:}}

更多细节

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

  • 我需要检查具有 FIELD 值 X 的对象已经存在;$exists 将查找带有 FIELD 的对象,无论其值是多少。再说一次,我只需要知道对象已经在数据库中,我不需要它自己 (2认同)
  • db.colleaction.count({filed:value})>0 我们如何使用 gopkg.in/mgo.v2 在 golang 中做到这一点? (2认同)