How to use Aggregate in mongoose

2020-07-06 01:53发布

How do I define the following MongoDB aggregate query in mongoose:

db.contacts.aggregate([{$group: { "_id": { code: "$Code", name: "$Name" } } }])

The objective of the query is to pull a list of distinct codes and names.

My current model code is:

'use strict';

var mongoose = require('mongoose'),
    Schema = mongoose.Schema,
    ObjectId = Schema.ObjectId;

var fields = {
    Code: { type: String },
    Name: { type: String }
};

var contactSchema = new Schema(fields);

module.exports = mongoose.model('Contacts', contactSchema);

Router looks like this:

api.contacts = function (req, res) {
Contacts.find({ AgencyTranslation: /^BROADCASTING/ }, function(err, contacts) {
  if (err) {
    res.json(500, err);
  } else {    
    res.json({contacts: contacts});
  }
});

I tried various variations, also looked up the sample code at: mongoose API docs, but I cannot seem to get it working.

(Note: the above query does work in the MongoDB console.)

1条回答
够拽才男人
2楼-- · 2020-07-06 02:43

Try this

Contacts.aggregate({$group: { "_id": { code: "$Code", name: "$Name" } } }, function(err, contacts) {
   ...
});

Or, with $match if you need this AgencyTranslation: /^BROADCASTING/ condition

Contacts.aggregate([
  { $match : { AgencyTranslation: /^BROADCASTING/ } },
  { $group: { "_id": { code: "$Code", name: "$Name" } } }
], function(err, contacts) {
  // ...
});
查看更多
登录 后发表回答