MongoDB

MongoDB 知识量:13 - 42 - 129

5.3 固定集合><

创建固定集合- 5.3.1 -

在 MongoDB 中,集合(collection)是用于存储类似类型数据的容器。默认情况下,MongoDB 允许集合自动增长,以适应插入的数据量。然而,有时可能希望限制集合的大小,以确保数据不会无限增长。在这种情况下,可以使用固定集合(capped collection)来限制集合的大小。

要创建固定集合,可以使用 createCollection() 方法,并指定 capped 选项为 true。同时,还可以设置 size 选项来指定集合的最大字节大小。例如:

db.createCollection("myCollection", { capped: true, size: 10485760 })

上述命令将创建一个名为 myCollection 的固定集合,最大字节大小为 10MB。

一旦创建了固定集合,MongoDB 将限制插入新文档的能力,以确保集合不会超过指定的最大大小。当集合达到其最大大小时,MongoDB 将不再允许插入新文档,除非删除现有文档以释放空间。

需要注意的是,固定集合有一些限制和注意事项:

  • 固定集合只能按照插入顺序进行读取和写入操作,不能进行更新或删除操作。

  • 固定集合不支持索引,因此查询性能可能会受到影响。

  • 固定集合适合存储少量且频繁访问的数据,而不是大量或稀疏的数据。

可追加游标- 5.3.2 -

在 MongoDB 中,可以使用可追加游标(tailable cursor)来读取分片集群中的数据,尤其是在使用复制集的情况下。可追加游标可以追踪最后一个读取的文档,并在有新文档被插入到集合中时提供通知。这对于实现实时消息队列或实时事件流等用例非常有用。

要创建一个可追加游标,可以使用 cursor.noCursorTimeout() 方法来保持游标打开状态,并使用 cursor.noCursorTimeout() 方法来关闭游标。还可以使用 cursor.forEach() 方法来迭代游标中的文档。

以下是一个示例代码片段,演示如何使用可追加游标:

const { MongoClient } = require('mongodb');  
  
const uri = 'mongodb://localhost:27017';  
const client = new MongoClient(uri);  
  
client.connect((err) => {  
  if (err) {  
    console.error('Error connecting to MongoDB:', err);  
    return;  
  }  
  
  const db = client.db('mydb');  
  const collection = db.collection('mycollection');  
  
  // 创建一个可追加游标  
  const tailableCursor = collection.find({})  
    .sort({ $natural: -1 }) // 按照插入顺序排序  
    .cursor({ noCursorTimeout: true }); // 保持游标打开状态  
  
  // 处理每个文档  
  tailableCursor.forEach((doc) => {  
    console.log(doc);  
  });  
  
  // 关闭游标  
  tailableCursor.noCursorTimeout();  
});

在上述示例中,首先连接到 MongoDB 服务器,并获取对 mydb 数据库的引用。然后,使用 find() 方法创建一个可追加游标,通过 sort() 方法按插入顺序对文档进行排序。还使用 cursor({ noCursorTimeout: true }) 方法保持游标打开状态,以便在有新文档被插入时接收通知。最后,使用 forEach() 方法迭代游标中的文档,并使用 noCursorTimeout() 方法关闭游标。

注意:可追加游标仅适用于分片集群中的集合,并且需要使用复制集来实现。