1. ホーム
  2. node.js

[解決済み] mongooseでのAggregateの使い方

2022-03-04 09:22:41

質問

mongooseで以下のようなMongoDBの集約クエリを定義するにはどうしたらよいでしょうか。

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

このクエリの目的は、異なるコードと名前のリストを引き出すことです。

私の現在のモデルコードは

'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);

ルーターはこのようになります。

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

でサンプルコードを調べたりして、いろいろと試してみました。 mongoose API ドキュメント が、どうもうまくいきません。

(注:上記のクエリはMongoDBコンソールで動作します。)

どのように解決するのですか?

これを試してみてください

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

または $match が必要な場合は、この AgencyTranslation: /^BROADCASTING/ 条件

Contacts.aggregate([
  { $match : { AgencyTranslation: /^BROADCASTING/ } },
  { $group: { "_id": { code: "$Code", name: "$Name" } } }
], function(err, contacts) {
  // ...
});