Mongodb / Mongoose:我可以通过填充的子文档的创建日期对父查询进行排序吗?

时间:2018-01-05 07:18:48

标签: mongodb mongoose

我有像这样的MongoDB / Mongoose查询:

WineUniversal.find(query)
.populate([{
    path: 'userWines',
    model: 'Wine',
    match: {scoreTotal: {$gte: 50} }
}])
.sort({'userWines[0].created': -1 }) // Can something like this be done?
.limit(500)
.skip(0)
.exec(function() {...})

是否可以更改.sort()函数基于`created'填充的userWines文档的日期属性?

1 个答案:

答案 0 :(得分:1)

mongoose populate中没有内置这样的功能。

您可以轻松实现类似3.4中的内容。

类似于填充的概念,但所有繁重的工作都是通过聚合框架在单个服务器调用中完成的。

$lookup阶段用于根据匹配的userWines数组(后跟$unwind$match)从wine集合中提取数据,以提供匹配葡萄酒的查询条件。

$group阶段将所有葡萄酒推回阵列。

$sort阶段根据葡萄酒阵列中的最大创建日期对输入文档进行排序。

WineUniversal.aggregate([
{"$match":query}, 
{"$lookup":{
  "from":"wines", // name of the collection, not model or schema name
  "localField":"userWines",
  "foreignField":"_id",
  "as":"userWines"
}},
{"$unwind":"$userWines"},
{"$match":{"userWines.scoreTotal":{"$gte":50}}},
{"$group":{
  "_id":"$_id",
  "userWines":{"$push":"$userWines"}
}},
{"$sort":{"userWines.created":-1}},
{"$limit":500},
{"$skip":0}]).exec(function() {...})