首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node-mongodb-native何时命中数据库?

node-mongodb-native何时命中数据库?
EN

Stack Overflow用户
提问于 2013-02-13 17:54:33
回答 2查看 84关注 0票数 0

在使用node-mongodb-native时,我很难理解数据库被命中的确切时间。在那上面找不到任何参考资料。因为一切都是基于回调的,它给我的感觉是每一个调用都会命中数据库……例如,这两个片段在数据库命中次数方面有什么不同:

代码语言:javascript
复制
// ---- 1
db.collection('bla', function(err, coll) {
    coll.findOne({'blo': 'bli'}, function(err, doc) {
        coll.count(function(err, count) {
            console.log(doc, count)
        })
    })
})

// ---- 2
db.collection('bla', function(err, coll) {
    coll.findOne({'blo': 'bli'}, function(err, doc) {
        db.collection('bla', function(err, coll) {
            coll.count(function(err, count) {
                console.log(doc, count)
            })
        })
    })
})

我基本上想知道我是否可以缓存集合和游标的实例。例如,为什么不在服务器启动时获取我只需要一次的集合,然后无限期地重用相同的实例呢?

我真的很想了解整个事情是如何工作的,所以我真的很感激能有一个很好的链接来详细解释这些东西。

EN

回答 2

Stack Overflow用户

发布于 2013-02-13 18:50:08

查看collection的node.js驱动程序的源代码,它似乎不会在创建集合时ping MongoDB,除非您有严格的模式on:https://github.com/mongodb/node-mongodb-native/blob/master/Readme.md#strict-mode

我查看的源代码( https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/db.js#L446 )强化了这样一种想法:如果strict没有打开,那么它只会尝试创建一个新的node.js集合对象并运行回调。

然而,findOnecount将打破node.js的“懒惰”查询,并强制它查询数据库才能获得结果。

注意:集合中的count不会强制对集合中的所有项进行“真”计数。取而代之的是,它将从集合元中装饰此信息。

因此,对于第一个代码片段,您应该会看到运行了两个查询。一个用于findOne,一个用于count,还有两个用于第二个代码片段,因为在findOne之后创建集合不应该强制查询MongoDB。

票数 1
EN

Stack Overflow用户

发布于 2013-02-13 20:07:49

经过一些谷歌搜索,我找到了关于node-mongodb-native的最佳实践的this link。这个问题是由克里斯蒂安·克瓦海姆回答的,他似乎是图书馆的维护者。他说:

“如果愿意,您可以安全地存储集合对象并重用它们”

因此,即使在strict模式下对collection的调用可能会命中数据库,也可以重用实际的客户端集合实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14850715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档