MongoDb:如何在Collection上合并5个匹配查询的结果,并按查询结果排序结果

时间:2016-03-31 14:40:22

标签: node.js mongodb mongoose

我有一个这样的架构:

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?

1 个答案:

答案 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
}]