2017-03-27 48 views
0

作爲我的標題,$ match _id在Mongoose集合函數中不起作用。 有人可以幫我嗎? 這與貓鼬版本有關嗎? 我使用4.9.2。 我需要使用聚合,因爲在處理$ match之後,我將按結果進行分組。 我已經看過帖子了,但是手工鑄造對我來說沒有用!

這裏是我的架構:

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中找出_id.store實際上是String而不是ObjectId,所以最好的方法是是將我在問題中提到的模式更改爲:

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