MongoDB 知识量:13 - 42 - 129
在 MongoDB 中,集合(collection)是用于存储类似类型数据的容器。默认情况下,MongoDB 允许集合自动增长,以适应插入的数据量。然而,有时可能希望限制集合的大小,以确保数据不会无限增长。在这种情况下,可以使用固定集合(capped collection)来限制集合的大小。
要创建固定集合,可以使用 createCollection() 方法,并指定 capped 选项为 true。同时,还可以设置 size 选项来指定集合的最大字节大小。例如:
db.createCollection("myCollection", { capped: true, size: 10485760 })
上述命令将创建一个名为 myCollection 的固定集合,最大字节大小为 10MB。
一旦创建了固定集合,MongoDB 将限制插入新文档的能力,以确保集合不会超过指定的最大大小。当集合达到其最大大小时,MongoDB 将不再允许插入新文档,除非删除现有文档以释放空间。
需要注意的是,固定集合有一些限制和注意事项:
固定集合只能按照插入顺序进行读取和写入操作,不能进行更新或删除操作。
固定集合不支持索引,因此查询性能可能会受到影响。
固定集合适合存储少量且频繁访问的数据,而不是大量或稀疏的数据。
在 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() 方法关闭游标。
注意:可追加游标仅适用于分片集群中的集合,并且需要使用复制集来实现。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6