作为我的标题,$ 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 :(得分:1)
当我在mongoose版本4.4.4中进行测试时,类型转换和字符串都不起作用。但是,在我将其更新到版本4.9.2后,不需要输入类型,并直接使用$ match _id中的字符串工作!
<强>更新:2017年3月31日强>
我认为我的场景中的另一个问题是我的架构定义。由于此集合(例如A)是使用$group: { _id: { storeID: "$storeID" } }
从另一个集合(例如B)创建的,其中集合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
}],
});