【发布时间】:2021-04-20 06:17:44
【问题描述】:
假设我有一个聚合管道,我能够根据需要获取所需的详细信息,但我需要按降序对名为 visits 的键的值进行排序,然后在其中挑选项目。
{
$match: {
mobile_number: "1234567890",
}
},
{
$lookup: {
from: "visitor_logs",
localField: "_id",
foreignField: "visitor_id",
as: "visits",
}
},
{
$project: {
_id: 0,
visitor_id: "$_id",
first_name: "$first_name",
last_name: "$last_name",
mobile_number: "$mobile_number",
visits: {
$filter: {
input: "$visits",
as: "visit",
cond: {
$and: [
{$gte: ["$$visit.in_time", "1610609615"]},
{$lte: ["$$visit.in_time", "1610615328"]},
]
}
},
},
}
},
]);
示例响应
{
"type": "SUCCESS",
"log": [
{
"visitor_id": "5ffff1354351be2c600c4f94",
"first_name": "Ayan",
"last_name": "Dey",
"mobile_number": "1234567890",
"visits": [
{
"_id": "5ffff3df82dc1a0e90d89a5c",
"in_time": "1610609615",
"out_time": "1610609671",
"checked_in_status": false,
"visitor_id": "5ffff1354351be2c600c4f94",
"visit_purpose": "Test",
"person_to_meet": "Someone new",
"__v": 0
},
{
"_id": "5ffff41a82dc1a0e90d89a5d",
"in_time": "1610609615",
"out_time": "1610609730",
"checked_in_status": false,
"visitor_id": "5ffff1354351be2c600c4f94",
"visit_purpose": "Test",
"person_to_meet": "Someone new",
"__v": 0
},
{
"_id": "5ffff45a82dc1a0e90d89a5e",
"in_time": "1610609615",
"out_time": "1610609919",
"checked_in_status": false,
"visitor_id": "5ffff1354351be2c600c4f94",
"visit_purpose": "Test",
"person_to_meet": "Someone new",
"__v": 0
}
]
}
]
}
现在,我正在寻找的是根据_id 以降序排列visits 字段。我的意思是挑选 visits 中的某些项目。
【问题讨论】:
-
能否给我们看一些文档,
visits下每个数组元素的字段部分是什么,并解释一下樱桃采摘? -
@Gibbs 更新了我的问题。你能解释一下投反对票的原因吗?
-
尝试使用管道查找并添加 2 个阶段,第一个是 $match,第二个是 $sort。
-
@turivishal 是的,我已经这样做了(请参阅答案中的评论)。它奏效了。
标签: javascript mongodb mongoose aggregation-framework