2017-03-27 23 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 
    }], 
});