问题标签 [capped-collections]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2632 浏览

java - 如果上限集合达到最大大小,为什么 MongoDB 不会删除旧文档?

我有一个上限集合,它是在 java 代码中创建的:

现在在这个集合的统计数据中,我们有:

如果我尝试使用以下代码在集合中插入文档:

我发现了这个错误:

我究竟做错了什么?以及如何解决?(排除到 .drop() 这个集合并重新创建)感谢您的回答!

0 投票
0 回答
561 浏览

mongodb - 在 Capped Collection MongoDB 中更新?

如何更新以下上限集合。我想将城市:“纽约”更新为“某个地方”

}

我处理了这个查询

但它没有得到 uddate 而是我得到这个错误//

更新失败:上限 ns 中的对象无法增长。如何解决这个问题。请帮助我。

0 投票
2 回答
1541 浏览

mongodb - MongoDB获取Capped集合的大小

是否可以在 MongoDB 中获得上限集合的最大大小,与您在创建期间指定的大小相同?

0 投票
1 回答
256 浏览

mongodb - 使用可尾游标时,hint({$natural: 1}) 是多余的吗?

在我发现在上限集合上使用可尾游标的许多示例中,代码包括:

(例如这里),包括官方文档(这里),以“确保我们不使用任何索引”,并且结果以自然(即磁盘)顺序返回。

但是,文档还建议这是可尾游标的默认行为:

Tailable 游标不使用索引并以自然顺序返回文档。

那么是否使用了hint冗余

我尝试查看explain()有无 的输出hint,据我所知,没有区别。

0 投票
0 回答
370 浏览

cassandra - Cassandra 中的“上限收藏”

Cassandra 没有上限集合(或行大小限制),但模拟它的一种方法是使用离线 mapreduce 作业清理额外条目。有第二个表来存储另一个表中主键的行数会更好吗?缺点是您必须扫描整个 row_count 表,因为计数器不可索引。或者用真实数据扫描后备表会更快吗?

还是我应该研究另一种技术?

编辑:我发现这个Columns count vs counter column performance。行数会遍历所有数据,所以我倾向于远离这一点。

0 投票
1 回答
199 浏览

mongodb - Processing jobs from capped collection until interrupted using ReactiveMongo

I have a jobs_queue collection in MongoDB. It's a capped collection which I'm polling using a tailable cursor:

This is being called from a regular Scala App, so there's no Akka or Play wrapping at all.

What would be the most appropriate way to make sure the App doesn't exit until I explicitly break out of the Iteratee.foreach? Also, I don't have to use play-iteratees at all if there's a simpler (even if slightly less elegant) way.


P.S. I do ensure the collection is capped:

P.P.S.

I will also appreciate any criticism as to how I've designed this bit of logic, and how I could solve this by rethinking my approach and slightly overhauling the implementation.

0 投票
1 回答
2805 浏览

javascript - mongodb - 使用 nodejs 的封顶集合

我正在尝试使用 Node.js(使用本机 MongoDB 驱动程序)在 MongoDB 中设置和更新一些上限集合。我的目标是,在运行 app.js 时,将文档插入到上限集合中,并更新上限集合中的现有文档。这两个都在运行setInterval(),所以每隔几秒钟。

我的问题:

  1. 如果集合尚不存在,我想创建一个集合,但如果存在,我想将文档插入其中。检查这个的正确方法是什么?
  2. 对于有上限的集合,我是否应该在向其中插入任何内容之前先明确地创建它们?通常我相信你可以在不先明确创建它们的情况下将它们插入到集合中,但在这种情况下,我需要确保它们被封顶。一旦存在上限集合,我就知道如何将新文档插入其中,问题是我需要一些方法来处理第一次使用的应用程序(在新服务器上),其中集合尚不存在,我想要使用节点进行此创建,而不必跳入 mongo cli。
  3. 这里的诀窍是集合需要设置上限,所以我可以执行以下操作db.createCollection("collectionName", { capped : true, size : 100000, max : 5000 } ):这将为我创建上限集合,但每次我调用它时它都会调用createCollection()而不是更新或插入 - 如果我调用createCollection(),一旦集合已经存在,它会完全覆盖现有集合吗?
  4. 另一种方法是将集合转换为具有上限的集合:db.runCommand({"convertToCapped": "collectionName", size: 100000, max : 5000 });. 这样做的问题是节点不认为runCommand()是一个有效的函数并且它会出错。还有什么我打算打电话来让它工作的吗?它适用于 mongo cli,但不适用于节点
  5. 您使用什么类型的查询来查找集合中的第一个文档?同样,在 mongo cli 中我可以使用db.collections.find()一些查询,但在节点中它指出这find()不是一个有效的函数
  6. 我将如何使用collection.update()向现有文档添加一些新字段?可以说文档是一些简单的对象{key1: "value", key2: "value"},例如,但我有一个包含{key3: "value"}. 当前文档中不存在密钥 3,如何将其添加到当前存在的内容中?这与上面的 #4 有点相关,因为我不确定应该传入什么作为查询参数,因为它find()似乎不适用于 node.js。
0 投票
1 回答
92 浏览

mongodb - 从同一数据库中的不同 mongodb 上限集合同时读取和写入

我有一个数据库,其中包含多个小型上限集合(每个大约 1MByte),我在可尾游标模式下使用这些集合。是否可以从该数据库中的不同mongodb 上限集合同时读取和写入(即在写入集合 A 时从集合 B 尾部(和读取))。我读到 mongodB 在写入时锁定了数据库。这是真的?

0 投票
0 回答
385 浏览

mongodb - 社交活动提要 - MongoDB 中每用户上限集合的最佳方法?

我正在开发一个与 10Gen Socialite Project 非常相似的社交活动供稿系统,该系统已经在生产中运行了几年。我有一个新用例,其中我需要存储按时间顺序排列的每个用户的活动列表,其中活动列表应该:

  1. 只包含最近插入的 N 项
  2. 不插入语义等效项的重复项
  3. 允许对结果进行分页。

到目前为止,我已经提出了两种解决此问题的方法,但两者似乎都有令人不安的局限性。

第一种方法(与我的其他集合非常匹配)是有一个集合,其中包含每个活动的一个文档,由用户 ID 索引。例如:

每次我收到给定用户的新活动时,我都会插入一个如上所述的文档,其中包含相同的“所有者”子句但不同的“活动”子句。但是,我不确定处理插入的最有效方法。鉴于上述标准,一种伪代码方法将是:

这种方法的问题是它可能需要多达 3 次数据库操作才能完成插入和修剪。但是,使用“upsert”可以防止重复,我们可以使用生成的 ObjectID 进行时间查询和分页。

我研究过的另一种方法类似于 Socialite 中的FanoutOnWriteSizedBuckets方法。在这种情况下,活动列表作为子文档存储在 max-size 数组中,由用户 ID 索引。例如:

在这种情况下,查询也相当简单,但同样,插入是有问题的。我已经研究过使用 $update、$push、$addToSet、$ne、$each 等的各种技术和组合,但似乎没有一个能够以更有效的方式实现防止重复插入和修剪操作以上。

任何人都可以提出解决此用例的方法吗?

谢谢!

(x-发布到 mongodb-user Google Group) 已 解决: https ://groups.google.com/forum/#!topic/mongodb-user/ K8n7Gf1nv3Q

0 投票
1 回答
748 浏览

mongodb - Play + ReactiveMongo:上限集合和可尾光标

我正在使用带有 Scala、Akka 和 ReactiveMongo 的 Play Framework。我想将 MongoDB 中的集合用作循环队列。多个参与者可以将文档插入其中;一个参与者在这些文档可用时立即检索它们(一种发布-订阅系统)。我正在使用上限集合和可尾光标。每次我检索一些文档时,我都必须运行命令 EmptyCapped 来刷新上限集合(不可能从中删除元素),否则我总是检索相同的文档。有替代解决方案吗?例如,有没有办法在不删除元素的情况下滑动光标?或者在我的情况下最好不要使用上限集合?

}