【发布时间】:2020-10-16 11:16:30
【问题描述】:
我有收藏订单
{_id: ObjectId("5e32d0fadf54cb3d81293fb3"),
user_id:'test_user',
product_id:'product_2_id'
created_at:'2020-02-25T07:04:05.439+00:00'
}
我需要加入集合 recommendedProducts,该集合具有 orders.user_id 和 recommendedProducts.userId 作为公共键,看起来像
{_id: ObjectId("5e3ac145df54cbeca6230924"),
userId:'test_user'
rankedList:[
0:{Name:'Product_4',id:'product_4_id'},
1:{Name:'Product_1',id:'product_1_id'},
2:{Name:'Product_2',id:'product_2_id'}],
Date:'2020-02-25T06:03:55.439+00:00'
}
{_id: ObjectId("5e388da4df54cb8efb47e61b"),
userId:'test_user'
rankedList:[
0:{Name:'Product_5',id:'product_5_id'},
1:{Name:'Product_6',id:'product_6_id'},
2:{Name:'Product_3',id:'product_3_id'}],
Date:'2020-02-25T05:03:55.439+00:00'
}
我已阅读 this 以及 this 和 that 的帖子,但我仍然无法理清应该如何正确编写聚合管道。到目前为止,我有以下内容
db.orders.aggregate([
{
$lookup: {
"from": "recommendedProducts",
"as": "recommendations",
"let": {
"id": "$user_id"
},
"pipeline": [{
"$match": {
"$expr": {
"$eq": ["$userId", "$$id"]
}
}
},
{
"$sort": {
"Date": -1
}
},
{
"$limit": 1
}
]
}
}
])
应该可以正常工作但没有成功。 我需要在这里保留的是推荐产品集合中的最后一个文档,并且只有一个文档来自那里,这就是为什么我也使用排序和限制但我得到错误 "$cursor 阶段中的错误 :: 导致: : 操作超出时间限制" 这里的错误在哪里?
【问题讨论】:
标签: arrays mongodb mongodb-query aggregation-framework lookup