我正在使用带有插件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) {
// ...
});
我想知道这是否是一个好习惯。它工作得很好,但是我想那里有一个获取集合的回调是有原因的。我现在正在建立收集缓存有意义吗?
最佳答案
这完全取决于集合对象是什么。
-直播吗?
-它连接到数据库了吗?
-是否进行内部缓存?
-是否反映新数据?
不知道这些详细信息,我建议您创建一个延迟评估代理。
Mongo.collection("test").find(...).toArray(function(err, results) {
// ...
});
这里的想法是,您在内部存储find命令,并在调用toArray时获取集合并在其上调用find命令,然后调用toArray。
这意味着您每次都会获得一个新的集合,并且避免了“缓存安全”的问题,但仍然拥有一个不错的API。
关于caching - 构建收集缓存是否是一个好习惯?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8344500/