[英]$project query in MongoDB with mongoose
鑒於此文件:
"_id" : ObjectId("5a4ea040825de6c0bbbcc810"),
"onOpened" : [
{
"createdOn" : ISODate("2018-01-04T21:46:56.756Z"),
"_id" : ObjectId("5a4ea0d0825de6c0bbbcc828")
},
{
"createdOn" : ISODate("2018-01-04T21:57:24.939Z"),
"_id" : ObjectId("5a4ea344a7513e0d27642494")
},
{
"createdOn" : ISODate("2018-01-05T18:27:26.839Z"),
"_id" : ObjectId("5a4fc38e62a06a8cced22657")
}]
"onSynched" : [
{
"createdOn" : ISODate("2018-01-04T21:46:56.756Z"),
"_id" : ObjectId("5a4ea0d0825de6c0bbbcc828")
},
{
"createdOn" : ISODate("2018-01-04T21:57:24.939Z"),
"_id" : ObjectId("5a4ea344a7513e0d27642494")
},
{
"createdOn" : ISODate("2018-01-05T18:27:26.839Z"),
"_id" : ObjectId("5a4fc38e62a06a8cced22657")
}]
我試圖在MongoDB / Mongoose中進行aggregate
查詢,以便只能從給定的日期范圍中選擇元素。 我嘗試了這個:
module.exports.getWorksetStats = function (req, res) {
var id = req.params.id;
var from = new Date(req.query.from);
var to = new Date(req.query.to);
HealthRecords
.aggregate(
[
{$match: {_id: id}},
{$project: {
'onOpened': {$filter: {
input: '$onOpened',
as: 'item',
cond: {$and: [
{$gte: ['$$item.createdOn', from]},
{$lte: ['$$item.createdOn', to]}
]}
}}
}}
]
).exec(function (err, response){
var result = {
status: 200,
message: response
};
if (err){
result.status = 500;
result.message = err;
} else if (!response){
result.status = 404;
result.message = err;
}
res.status(result.status).json(result.message);
});
};
不幸的是,這似乎返回了一個空數組。 誰能想到我在這里做錯了什么?
另外,目標是在單個查詢中在此處做一些事情,但是我認為我可以從此開始。 我們的想法是真的:1.獲取onOpened
按日期范圍過濾,2 onSynched
按日期范圍,3和另一個集合但有過濾$slice: -1
。
我正在使用MongoDB 3.4.7和Mongoose 4.5.5。
嘗試這個
db.getCollection('TEST').aggregate([{
$match: {
_id: id
}
},
{
$project: {
onOpened: {
$filter: {
input: "$onOpened",
as: "item",
cond: {
$gte: ['$$item.createdOn', from],
$lte: ['$$item.createdOn', to]
}
}
},
onSynched: 1
}
}
]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.