如何根据字段对mongo进行排序,但优先考虑满足一定条件的文档?

时间:2016-01-19 12:46:20

标签: mongodb sorting

我有一个mongodb集合,我根据上次更新日期使用{ $sort : { updated_at : -1 } }对其进行排序。 现在我正在尝试更新我的查询仍然按updated_at排序,但首先优先选择满足某个条件的文档,例如字段的数组长度大于零,即{'img.0': { $exists: true }}

但是如何在排序查询中将它组合起来呢?

我的要求是查询应首先返回img长度大于0的所有文档,按updated_at排序,然后列出按updated_at

由于

2 个答案:

答案 0 :(得分:3)

使用 aggregation framework ,您的管道会在其中创建一个额外字段,其中包含代表上述条件的标记,您可以将其与updated_at字段一起用作排序选项:

db.test.aggregate([
    {
        "$project": {
            "img": 1,
            "updated_at": 1,
            "other_fields": 1,
            "hasImages": {
                "$cond": [
                    { 
                        "$ne": [ 
                            {
                                "$size": { "$ifNull": [ "$img", [] ] }
                            }, 
                            0 
                        ]
                    },
                    1, 0
                ]               
            }
        }
    },
    {
        "$sort": {
            "hasImages": -1, "updated_at": - 1
        }
    }
])

检查下面的测试演示

enter image description here

答案 1 :(得分:0)

double (*matrix)[m] = malloc(sizeof(double[m][m]));

malloc