注册

MongoDB 游标详解及实例代码

MongoDB 游标详解及实例代码

什么是游标?

游标是在 MongoDB 中用于处理大量数据时的一种迭代器。在执行查询时,MongoDB 返回一个指向结果集文档的游标对象,该对象可用于遍历结果集或者获取特定结果。

如何使用游标?

在 MongoDB 中使用游标需要使用 find() 方法,该方法返回一个游标对象。具体用法如下:

var cursor = db.collection.find(query, projection);
  • query 是查询条件,是一个 JSON 对象。如果没有查询条件,可以传入一个空对象。
  • projection 是返回结果的字段过滤条件,也是一个 JSON 对象。如果不需要过滤字段,可以传入一个空对象或者省略该参数。

使用游标的方法有两种,分别是:

1. 遍历游标

while(cursor.hasNext()) {
    var doc = cursor.next();
    // 处理文档
}

这种方式不适用于一次性返回大量数据的情况,因为需要将所有返回的文档保存在内存中。

2. 批量获取游标数据

cursor.forEach(function(doc) {
    // 处理文档
});

这种方式可以适用于一次性返回大量数据的情况,因为只需要处理一条记录,然后再从数据库中获取下一批数据,不会保存所有的数据在内存中。

游标的常用方法

  • cursor.limit(n):限制返回的记录数;
  • cursor.skip(n):跳过前 n 条记录;
  • cursor.sort(fields):按照指定字段排序,可以使用 1-1 分别表示升序或降序;
  • cursor.next():返回游标的下一条记录;
  • cursor.hasNext():判断游标是否还有下一条记录;
  • cursor.count():返回符合查询条件的总数。

示例代码

以下为两个示例代码,一个是通过遍历游标,另一个是通过批量获取游标数据:

示例1:遍历游标

var cursor = db.users.find({age: {$gte: 18}}, {name: 1, address: 1}).limit(100);

while(cursor.hasNext()) {
    var user = cursor.next();
    print("姓名:" + user.name + ",地址:" + user.address);
}

示例2:批量获取游标数据

var cursor = db.users.find({age: {$gte: 18}}, {name: 1, address: 1}).limit(100);

cursor.forEach(function(user) {
    print("姓名:" + user.name + ",地址:" + user.address);
});

以上内容就是 MongoDB 游标的详解及实例代码。