我试图减去两个日期以获得差异毫秒时,我在使用Mongoose聚合时遇到了麻烦。
这是文件的结构:
DeliverySchema = new mongoose.Schema({
hash: String,
status: Number,
insertedOn: {
type: Date,
default: Date.now
},
endedOn: {
type: Date
}
}, {
collection: 'Deliveries'
});
这是查询:
var Delivery = mongoose.model('Delivery');
return Delivery.aggregate([
{
$match: {
'insertedOn': {$ne: null, $type: 9},
'endedOn': {$ne: null, $type: 9}
}
},
{$project: {duration: {$subtract: ["$endedOn", "$insertedOn"]}}},
{
$group: {
_id: {
day: {$dayOfMonth: "$insertedOn"},
month: {$month: "$insertedOn"},
year: {$year: "$insertedOn"}
},
count: {$sum: 1},
durationAvg: {$avg: "$duration"}
}
},
{$sort: {"_id.year": 1, "_id.month": 1, "_id.day": 1}}
])
这是我得到的错误:
error: exception: can't convert from BSON type EOO to Date
$ match阶段应该过滤所有insertOn / endedOn字段为null或非Date的文档,但它似乎没用。我被卡住了,有人有任何线索吗? 我使用Mongoose 4.0.1(Mongolab上托管的mongod 2.6.9)和节点0.10.33。 感谢
感谢。
答案 0 :(得分:2)
$project
阶段的输出是仅包含计算出的duration
字段的文档。您还需要包含insertedOn
和endedOn
字段,以便它们可以在以下$group
阶段中使用:
{$project: {
duration: {$subtract: ["$endedOn", "$insertedOn"]},
endedOn: 1,
insertedOn: 1
}}