我正在为Mongo集合编写JavaScript单元测试。我有一个集合数组,我想为这些集合生成一个项目计数数组。具体来说,我对使用Array.prototype.map
感兴趣。我希望这样的事情可以发挥作用:
const collections = [fooCollection, barCollection, bazCollection];
const counts = collections.map(Mongo.Collection.find).map(Mongo.Collection.Cursor.count);
但相反,我收到一个错误,告诉我Mongo.Collection.find
未定义。我认为这可能与Mongo.Collection
是构造函数而不是实例化对象有关,但我想了解更好的情况。有人可以解释为什么我的方法不起作用,我需要改变什么,以便我可以将find
方法传递给map
?谢谢!
答案 0 :(得分:0)
find
和count
是原型函数,需要在集合实例上作为方法(具有正确的this
上下文)进行调用。 map
没有做到这一点。
最好的解决方案是使用箭头功能:
const counts = collections.map(collection => collection.find()).map(cursor => cursor.count())
但也有an ugly trick让你不用:
const counts = collections
.map(Function.prototype.call, Mongo.Collection.prototype.find)
.map(Function.prototype.call, Mongo.Collection.Cursor.prototype.count);