我有像这样的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文档的日期属性?
答案 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() {...})