Meteor只支持mongo集合上的几个方法,如find,findOne,insert,update,upsert,remove,allow,deny 我的问题是,我如何执行所有其他方法?我想在服务器端使用聚合,如下所示:
db.eshops.aggregate([
{
$unwind: '$unpairedCategories'
}, {
$group: {
_id: '$_id',
'sum': {
$sum: 1
}
}
}, {
$group: {
_id: null,
total_sum: {
'$sum': '$sum'
}
}
}
]);
Run Code Online (Sandbox Code Playgroud)
我应该将节点j的mongodb驱动程序与流星分开包含吗?或者运行所有其他mongo收集方法的流星方法是什么?
Meteor 的七个原则之一是数据库无处不在,即您应该能够在客户端和服务器端执行所有允许的操作(假设存在一些差异,例如allow deny客户端规则)。我想这就是为什么你不能拥有所有 mongo 方法的原因:它们在 minimongo(你的 mongo 集合的客户端版本)上不可行。
但是,如果您准备放弃反应性,则可以创建一个管道来处理aggregate命令,方法是将其添加到服务器启动代码中(代码取自此处):
wrapAsync = (Meteor.wrapAsync)? Meteor.wrapAsync : Meteor._wrapAsync;
Mongo.Collection.prototype.aggregate = function(pipelines) {
var coll;
if (this.rawCollection) {
// >= Meteor 1.0.4
coll = this.rawCollection();
} else {
// < Meteor 1.0.4
coll = this._getCollection();
}
return wrapAsync(coll.aggregate.bind(coll))(pipelines);
Run Code Online (Sandbox Code Playgroud)
如果您想保持反应性,您有两种可能的替代方案/解决方法。
cursor.Observe()功能,并混合使用巧妙的过滤和自定义 JS 方法(例如 sum),以获得与该aggregate方法所需的类似结果。请注意,您保持反应性,但每个服务器(如果您计划扩展多个服务器)都需要Observe()集合。检查此示例:https ://stackoverflow.com/a/30813050/3793161| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |