node mongodb native何时访问数据库?

node mongodb native何时访问数据库?,mongodb,node-mongodb-native,Mongodb,Node Mongodb Native,使用node mongodb native时,我很难准确地理解何时命中数据库。找不到这方面的任何参考资料。因为一切都是基于回调的,所以我觉得每次调用都会命中数据库。。。例如,这两个代码段在数据库被命中的次数方面是否有任何不同: // ---- 1 db.collection('bla', function(err, coll) { coll.findOne({'blo': 'bli'}, function(err, doc) { coll.count(function(e

使用
node mongodb native
时,我很难准确地理解何时命中数据库。找不到这方面的任何参考资料。因为一切都是基于回调的,所以我觉得每次调用都会命中数据库。。。例如,这两个代码段在数据库被命中的次数方面是否有任何不同:

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


我真的很想了解整个过程是如何工作的,因此我非常希望有一个好的链接来详细解释这些内容。

查看
集合的node.js驱动程序的源代码
似乎在创建集合时不会ping MongoDB,除非您在以下方面有严格的模式:

我查看的源代码()强化了这样一种想法:如果strict未启用,那么它将尝试创建一个新的node.js集合对象并运行回调

但是
findOne
count
将打破node.js的“惰性”查询,并将强制其查询数据库以获得结果

注意:集合中的
计数
不会强制集合中所有项目的“true”计数。相反,它将从集合元中装饰此信息


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

通过谷歌搜索,我找到了
节点MongoDB native
的最佳实践。克里斯蒂安·克瓦尔海姆(Christian Kvalheim)似乎是图书馆的维护者。他说:

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


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

coll.count(函数(err,count){
将多次命中数据库,MOngoDB不能说从一秒到下一秒,两个查询的计数是sameYes…
count
我猜它至少命中数据库一次,但调用并没有真正获取结果,只是返回某个实例,这有点难以猜测。因为它没有获取结果并不意味着它不运行查询。因为您没有迭代
find
执行的唯一查询应该是在计数上执行的。
find
的查询将在计数上运行,但不会在切换操作之前运行,我犯了一个错误,我的意思是
findOne
。我相信在这里
find
永远不会运行nce
count
在集合上,而不是光标上。但是,从你所说的,听起来好像查询是缓存的,直到你真正请求一个结果,然后立即运行。那么为什么所有这些回调呢???难道不是
db.collection('bla')。find({blo':'bli'))。count(函数(err,count){/*blablablabla*/})