我在golang中使用了官方的mongo驱动程序,并试图确定记录是否存在。不幸的是,文档没有说明如何执行此操作。我正在尝试使用FindOne进行操作,但是如果找不到结果,它将返回并返回错误,而且我不知道如何将该错误与其他任何错误区分开(缺少比较感觉错误的字符串。正确的方法是使用正式的golang驱动程序检查mongo中是否存在文档?
这是我的代码。
ctx := context.Background()
var result Page
err := c.FindOne(ctx, bson.D{{"url", url}}).Decode(&result)
fmt.Println("err: ", err)
// how do I distinguish which error type here?
if err != nil {
log.Fatal(err)
}
答案 0 :(得分:2)
这是答案。
var coll *mongo.Collection
var id primitive.ObjectID
// find the document for which the _id field matches id
// specify the Sort option to sort the documents by age
// the first document in the sorted order will be returned
opts := options.FindOne().SetSort(bson.D{{"age", 1}})
var result bson.M
err := coll.FindOne(context.TODO(), bson.D{{"_id", id}}, opts).Decode(&result)
if err != nil {
// ErrNoDocuments means that the filter did not match any documents in the collection
if err == mongo.ErrNoDocuments {
return
}
log.Fatal(err)
}
fmt.Printf("found document %v", result)