Hi,
I am trying to implement the excellent suggestions by Rob Fallows for aggregations (Meteor Aggregate not showing correct results).
However, I get the following error:
err TypeError: Cannot read property 'name' of undefined
at Collection.aggregate (/home/george/.meteor/packages/npm-mongo/.3.1.1.v3rpzk.m5kk8++os+web.browser+web.browser.legacy+web.cordova/npm/node_modules/mongodb/lib/collection.js:1738:39)
at Promise.asyncApply (imports/startup/server/aggregate.js:12:36)
at /home/george/.meteor/packages/promise/.0.11.2.1gwulfb.vjny++os+web.browser+web.browser.legacy+web.cordova/npm/node_modules/meteor-promise/fiber_pool.js:43:u5408:
I created a meteor (1.8) project with: meteor create --bare test
on the server I have the following files:
====== index.js ====
import './api';
====== api.js=====
import './Nodes';
import './populate';
import './aggregate';
==== Nodes.js ====
import {Mongo} from 'meteor/mongo';
const Nodes = new Mongo.Collection('Nodes');
Nodes.aggregate = Nodes.rawCollection().aggregate; // define an aggregate method;
export default Nodes;
==== populate.js =====
import Nodes from './Nodes';
for (let i = 0; i <= 100; i += 1) {
Nodes.insert({prop1: 'test', val: i});
}
==== aggregate.js =====
import Nodes from './Nodes';
const mypipeline = [
{
$match: {prop1: 'test'}
},
{
$sort: {val: -1}
}
];
const testfunc = async pipeline => Nodes.aggregate(pipeline).toArray();
testfunc(mypipeline)
.then(docs => {
console.log('docs>', docs);
})
.catch(err => {
console.log('err', err);
});
If I do a console.log(Nodes.aggregate) I get a function which has the following line:
// Build the command
const command = { aggregate: this.s.name, pipeline: pipeline };
So it looks like ‘this.s’ does not exist for some reason.
Any advice as to where I am going wrong would be appreciated.