我使用的是Go Mongo文档,其中显式地写道,如果使用FindOne函数,如果没有文档与筛选器匹配,将返回ErrNoDocuments,但是,如果我使用Find函数,并且找不到任何文档,则不会返回此错误.有没有一种方法可以判断游标是否为空,而无需获取所有返回文档的列表,然后判断该列表是否为空?
我使用的是Go Mongo文档,其中显式地写道,如果使用FindOne函数,如果没有文档与筛选器匹配,将返回ErrNoDocuments,但是,如果我使用Find函数,并且找不到任何文档,则不会返回此错误.有没有一种方法可以判断游标是否为空,而无需获取所有返回文档的列表,然后判断该列表是否为空?
你可以简单地拨打Cursor.Next()
来告诉你是否还有更多的文件.如果您还没有迭代任何结果文档,这将告诉您是否至少有一个结果文档.
请注意,这将导致获取第一批结果(但不会将任何结果文档解码为任何GO值).
还请注意,如果发生错误或传递的context.Context
将过期,则Cursor.Next()
将返回false
.
示例:
var c *mongo.Collection // Acquire collection
curs, err := c.Find(ctx, bson.M{"your-query": "here"})
// handle error
hasResults := curs.Next(ctx)
if hasResults {
// There are result documents
}
// Don't forget to close the cursor!
不过,如果您打算对结果进行解码,不妨拨打Cursor.All()
并判断结果切片的长度:
curs, err := c.Find(ctx, bson.M{"your-query": "here"})
// handle error
var results []YourType
err := curs.All(ctx, &results)
// Handle error
if len(results) > 0 {
// There are results
}
// Note: Cursor.All() closes the cursor