我使用的是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

Mongodb相关问答推荐

使用单个/多个值查询任何/特定,而不使用if块

在MongoDB中使用explain()和查询时缺少winningPlan''''

在服务器上部署后端时判断??=默认判断

MongoDB:如何获取多个$indexOfArray值?

在对象mongodb的数组中查找元素

如何匹配 MongoDB 中同一文档中两个字段的比较?

MongoDB 按日期时间字段查询 1h 间隔

如何将以下聚合查询转换为 bson 并在 golang 中执行

Mongo:投影不影响布尔值

删除一对一和一对多引用 - Mongoose

MongoDB 中 cursor.count() 和 cursor.size() 之间的区别

使用 mongoimport 将日期(ISODate)导入 MongoDB

是否有适用于 Linux 的 MongoDB GUI 桌面应用程序?

使用已排序的数据获取不同的值

如何使用 angular.js 推送通知?

使用 Jackson 与 Java Mongo DBObject 进行高效 POJO 映射

如何仅通过一次调用将一组对象保存到mongoose数据库?

如何向 mongodb 2.6 添加身份验证?

如何将转储文件夹导入 mongodb 数据库?

从 mongo 结果中删除 _id