2017-03-27 4 views
0

Wie mein Titel funktioniert $ match _id nicht in Mongoose-Aggregatfunktion. Könnte mir bitte jemand helfen? Bezieht sich dies auf die Mungo-Version? Ich benutze 4.9.2. Ich muss Aggregat verwenden, weil ich nach der Verarbeitung des $ match durch das Ergebnis gruppieren werde. Ich habe schon Posts gesehen, aber das manuelle Casting funktionierte nicht für mich!

Hier ist mein Schema:

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

Und hier ist die Abfrage:

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

Bitte helfen Sie mir !!!! Ich steckte mehrere Stunden fest! Q_Q

+0

Was versuchen Sie letztlich zu erreichen? Ich habe das Gefühl, dass du "schicker" bist, als du sein musst. – Pytth

+0

Ich habe nur den Spielteil aufgelistet. Meine Arbeit ist kompliziert, daher weiß ich, dass die Aggregatfunktion benötigt wird. Nebenbei, ich habe das Problem gelöst! Match auf _id funktioniert ohne Typcasting in der neuesten Version! –

Antwort

0

Als ich in der Mungo-Version 4.4.4 getestet habe, funktionierten sowohl das Casting als auch der String nicht. Nachdem ich es jedoch auf die Version 4.9.2 aktualisiert habe, muss casting nicht mehr benötigt werden und direkt mit einer Zeichenfolge in $ match _id gearbeitet werden!

Update: 2017-03-31

Ich denke, ein anderes Problem in meinem Szenario meine Schema-Definition ist. Da diese Sammlung, sagen wir A, von einer anderen, sagen wir B, unter Verwendung $group: { _id: { storeID: "$storeID" } }, wo die Speicher-ID-Feld in der Sammlung B ist vom Typ ObjectId, dann in der Sammlung AI herauszufinden, dass _id.store ist eigentlich eine String nicht ein , also der beste Weg ist das Schema zu ändern, das ich in der Frage erwähnt habe:

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