【问题标题】:Can you store a reference to a mongo collection?您可以存储对 mongo 集合的引用吗?
【发布时间】:2012-04-21 16:22:48
【问题描述】:

我可以在文件顶部放置类似...

var collection = db.mongo.collection('test', function(err, collection){return collection});

然后在任何文件函数中使用collection.find()

我想我的问题是……collection 是对集合的引用还是数据的副本?

如果集合中的数据发生变化,我仍然可以通过查询collection 变量来获取最新数据吗?

谢谢!!

【问题讨论】:

    标签: javascript node.js mongodb


    【解决方案1】:

    Collection 是对集合对象的引用。在您发出 find(或 findOne)之前,您手中没有真实数据。即使这样,它也会返回一个 Cursor 对象,而始终保持集合对象不变。

    同时存储集合或游标不会存储您的数据。请记住,您可能要处理数百万条记录。处理数据本身可能会占用服务器内存。相反,mongo 返回游标和引用供您过滤掉。在 PHP 中,您有一个名为 iterator_to_array 的函数,您可以将光标传递给它,并将其转换为数据数组。在javascript中我不知道是否有这样的功能。但我想这样的功能没有意义。过滤信息,直到您拥有可管理的数据大小,然后遍历光标并执行您的操作。如果您有类似配置数组之类的东西,而不是多个文档,请尝试将所有内容存储在一个上并使用 findOne() 函数获取它。

    但最后我想这只是一个设计问题,您的数据是否可以过滤。

    【讨论】:

    • 问题更多是关于我是否应该将集合引用存储在一个变量中,或者我是否应该每次都打开它,模式如下:db.mongo.collection('test', function(err, collection){collection.find()}); 它可能更多是一个节点问题,因为我不确定 php 的同步 i/o 的行为是否相同
    • 哦,我明白了。由于它只是一个指针,为了方便起见,您可以将它存储在 var 中。这是一个节点问题好吧。假设应用程序将运行很长时间(而不像开始和结束的 php 脚本)如果您经常使用集合,则可以将其存储在 var 中。如果您执行两个连续的查询并在它们之间更改数据,您将获得两个不同的结果集(或指向不同结果集的光标)。
    猜你喜欢
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    相关资源
    最近更新 更多