猫鼬聚合 - $减去日期
Mongoose aggregate - $subtract dates
我在尝试减去两个日期以获得毫秒数差异时遇到了 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 阶段应该过滤所有 insertedOn/endedOn 字段为空或非日期的文档,但它似乎没有用。我被卡住了,有人有任何线索吗?
我将 Mongoose 4.0.1(mongod 2.6.9 托管在 Mongolab 上)与 Node 0.10.33 一起使用。
谢谢
谢谢。
您的 $project
阶段的输出是仅包含计算的 duration
字段的文档。您还需要包括 insertedOn
和 endedOn
字段,以便它们可用于随后的 $group
阶段:
{$project: {
duration: {$subtract: ["$endedOn", "$insertedOn"]},
endedOn: 1,
insertedOn: 1
}}
我在尝试减去两个日期以获得毫秒数差异时遇到了 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 阶段应该过滤所有 insertedOn/endedOn 字段为空或非日期的文档,但它似乎没有用。我被卡住了,有人有任何线索吗? 我将 Mongoose 4.0.1(mongod 2.6.9 托管在 Mongolab 上)与 Node 0.10.33 一起使用。 谢谢
谢谢。
您的 $project
阶段的输出是仅包含计算的 duration
字段的文档。您还需要包括 insertedOn
和 endedOn
字段,以便它们可用于随后的 $group
阶段:
{$project: {
duration: {$subtract: ["$endedOn", "$insertedOn"]},
endedOn: 1,
insertedOn: 1
}}