2017-03-27 8 views
0

私のタイトルとして、$ match _idはMongoose集計関数では機能していません。 誰かが私を助けてくれますか? これはマングースバージョンに関連していますか? 4.9.2を使用します。 $一致を処理した後に結果をグループ化するので、集計を使用する必要があります。 私はすでに前に投稿を見たことがありますが、手動でキャスティングができませんでした!

は、ここに私のスキーマです:

var mongoose = require("mongoose"); 
var moment = require("moment"); 
var Schema = mongoose.Schema; 


var AvgDailyCharging = new Schema({ 
    _id : { 
     date: Date, 
     storeID: { 
      type: Schema.Types.ObjectId, 
      ref: 'store' 
     } 
    }, 
    chargers: [{ 
     transmitterID: { 
      type: Schema.Types.ObjectId, 
      ref: 'device' 
     }, 
     minutes: Number 
    }], 
}); 

mongoose.model('AvgDailyCharging', AvgDailyCharging); 

そして、ここでのクエリです:

var Mongoose = require('mongoose'); 
var Model = require('../db/model'); 
var Query = require('../db/query'); 

var RESULT_LIMIT = 2000; // Limit the return data size 

exports.getAvgDailyCharging = function(req, res) { 
    var id = new Mongoose.Types.ObjectId("58b43fdf0fd53910121ca6f4"); 
    var query = new Query("AvgDailyCharging"); 
    query.aggregate([ 
     { 
      $match: { 
       "_id.storeID": id, //HELP!!!!! 
       "_id.date": { //match only by this works fine. 
        $gte: new Date(req.params.startTime), 
        $lt: new Date(req.params.endTime) 
       } 
      } 
     } 
    ]).exec(function(error, data) { 
     if (error) { 
      res.send({result:'ERROR', message: error}); 
     } else { 
      res.send(data); 
     } 
    }); 
} 

私を助けてください!!!!私は数時間立ち往生した! Q_Q

+0

最終的に達成しようとしていることは何ですか?私は、あなたが必要とするよりも「好き」であると感じています。 – Pytth

+0

私はマッチ部分だけを記載しました。私の仕事は複雑なので、集計機能が必要です。ところで、私は問題を解決しました! _idのマッチは最新のバージョンでタイプキャストなしで動作します! –

答えて

0

私がマングース4.4.4でテストしていたとき、タイプキャストとストリングの両方が機能しませんでした。しかし、バージョン4.9.2に更新した後は、型キャストは不要で、$ match _idの文字列を直接使用しています!

更新日:2017年3月31日

私は私のシナリオでは、別の問題は、私のスキーマ定義だと思います。このコレクションAは、例えば、Bという別のコレクションから作成され、$group: { _id: { storeID: "$storeID" } }を使用してコレクションBのstoreIDフィールドがタイプObjectIdである場合、コレクションAIでは、Stringは実際にはObjectIdではないことがわかります。質問に記載されているスキーマを変更することです:

var AvgDailyCharging = new Schema({ 
    _id : { 
     date: Date, 
     storeID: String 
    }, 
    chargers: [{ 
     transmitterID: { 
      type: Schema.Types.ObjectId, 
      ref: 'device' 
     }, 
     minutes: Number 
    }], 
}); 
関連する問題