【发布时间】:2015-04-25 04:29:47
【问题描述】:
我正在尝试使用 Node.js(使用本机 MongoDB 驱动程序)在 MongoDB 中设置和更新一些上限集合。
我的目标是,在运行 app.js 时,将文档插入到上限集合中,并更新上限集合中的现有文档。这两个都在setInterval() 上运行,所以每隔几秒钟。
我的问题:
- 如果集合尚不存在,我想创建一个集合,但如果存在,我想在其中插入一个文档。检查这个的正确方法是什么?
- 对于有上限的集合,我是否应该在向其中插入任何内容之前先显式创建它们?通常我相信你可以在不先明确创建它们的情况下将它们插入集合中,但在这种情况下,我需要确保它们被封顶。一旦存在上限集合,我就知道如何将新文档插入其中,问题是我需要一些方法来处理第一次使用的应用程序(在新服务器上),其中集合尚不存在,我想要使用节点进行此创建,而不必跳转到 mongo cli。
- 这里的诀窍是集合需要设置上限,所以我可以执行以下操作:
db.createCollection("collectionName", { capped : true, size : 100000, max : 5000 } )。这将为我创建上限集合,但每次我调用它时它都会调用createCollection()而不是更新或插入 - 如果我调用createCollection(),一旦集合已经存在,它会完全覆盖现有集合吗?李> - 另一种方法是将集合转换为具有上限的集合:
db.runCommand({"convertToCapped": "collectionName", size: 100000, max : 5000 });。这样做的问题是节点没有将runCommand()视为有效函数并且它出错。还有什么我打算打电话来让它工作的吗?它在 mongo cli 中有效,但在节点中无效 - 您使用什么类型的查询来查找集合中的第一个文档?同样,在 mongo cli 中,我可以使用
db.collections.find()进行一些查询,但在节点中它指出find()不是有效函数 - 如何使用
collection.update()向现有文档添加一些新字段?假设文档是一些简单的对象,例如{key1: "value", key2: "value"},但我有一个包含{key3: "value"}的对象。当前文档中不存在密钥 3,如何将其添加到当前存在的内容中?这与上面的 #4 有点相关,因为我不确定应该将什么作为查询参数传入,因为find()似乎与节点不兼容。
【问题讨论】:
标签: javascript node.js mongodb native capped-collections