我有一个这样的架构:
new Schema({
first: { type: String, required: true, trim: true },
last: { type: String, trim: true },
third: { type: Schema.Types.ObjectId },
fourth: { type: Schema.Types.ObjectId },
fifth: { type: Schema.Types.ObjectId }
},options);
mongoose.model('User', schema);
说我在这个系列中有1000个文件。
我想以这样的方式对这些文档进行排序:
首先我们的文档与特定用户的所有字段值匹配(即与特定文档的所有五个字段值匹配)
然后匹配该用户的下四个字段,之后与下三个字段匹配 等等。
说第一场比赛找到了100个文件,
然后第二个将找到之前的100 + 200(即新的200个文档与该用户的下三个字段匹配),依此类推。
在此计算之后,我想首先显示第一个匹配排序结果,然后显示第二个匹配排序结果,依此类推。
我怎样才能使用mongoose?
答案 0 :(得分:0)
您需要使用聚合。
[{
$project: {
_id: 1,
matchCount: {
$sum: {
{ $cond: { if: { $eq: ['$first', first] } }, then: 1, else: 0 },
{ $cond: { if: { $eq: ['$last', last] } }, then: 1, else: 0 },
{ $cond: { if: { $eq: ['$third', third] } }, then: 1, else: 0 },
{ $cond: { if: { $eq: ['$fourth', fourth] } }, then: 1, else: 0 },
{ $cond: { if: { $eq: ['$fifth', fifth] } }, then: 1, else: 0 },
}
}
}
},
{
$sort: {
matchCount: -1
}
},
{
$limit: 200
}]