我正在编写一个聚合查询,我希望在两个集合之间执行MongoDB中的连接,为此我使用$ lookup,现在我的问题是$ lookup是否通过排序改变结果的顺序?因为如果它确实如此,那么我需要在$ lookup之后进行排序,如果没有那么我可以在$ lookup之前使用它吗?
我的代码如下:
brandmodel.aggregate(
{$project: { '_id':0, 'brand_id': 1, 'brand_name':1, 'brand_icon':1, 'banner_image': 1, 'weight': 1} },
{$lookup: {from: "student_coupons",localField: "brand_id",foreignField: "brand_id",as: "coupons"}},
{$unwind : "$coupons"},
{$sort: {weight: -1, "coupons.time_posted": -1}}, // SHOULD I WRITE THIS BEFORE LOOKUP OR AFTER LOOKUP
答案 0 :(得分:1)
在MongoDB 3.6中,$ lookup具有更富表现力的方式,您可以访问源文档的字段并在$ lookup阶段进行进一步的管道操作。参见documentation
例如,
db.movies.aggregate([
{ $match : { _id : ObjectId("573a1390f29313caabcd414c")} },
{ $lookup : {from: "comments",
let: {'id' : '$_id' },
pipeline: [
{ $match : { '$expr': { '$eq': [ '$movie_id', '$$id' ] } }},
{ $sort: {'date': -1} }
],
as: "comments"
}
}
])
您必须在let
中声明源集合中想要的任何字段,并根据需要进行匹配(这是可选的)。然后,您可以使用需要在正在查找的集合中应用的pipeline
阶段。