我正在使用插件node-mongodb-native
使用带有Node.js的MongoDB。我遇到的一个问题是嵌套回调的数量。我试图通过减少查询所需的代码来简化一些事情。
而不是......
db.collection("test", function(err, collection) {
collection.find(...).toArray(function(err, results) {
// ...
});
});
...我正在考虑构建一个充当集合缓存的对象,这样就不需要第一个回调。我正在使用以下代码构建对象:
var collections = {};
["test", "foo"].forEach(function(name) {
db.collection(name, function(err, coll) {
collections[name] = coll;
});
});
有了它,我就可以将第一个代码片段清理为:
collections.test.find(...).toArray(function(err, results) {
// ...
});
我想知道这是不是一个好习惯。它工作得很好,但我想收集一个集合的回调是有原因的。像我现在这样构建集合缓存是否有意义?
答案 0 :(得分:2)
这完全取决于集合对象是什么。 - 它活着吗? - 它是否连接到数据库? - 它是否进行任何内部缓存? - 它是否反映了新数据?
在不知道这些细节的情况下,我建议您创建一个惰性评估代理。
Mongo.collection("test").find(...).toArray(function(err, results) {
// ...
});
这里的想法是你在内部存储find命令,当你调用toArray时,你得到集合并在其上调用find命令,然后调用toArray。
这意味着您每次都会获得一个新的集合并避免“缓存安全”问题,但仍然有一个很好的API。