在mongodb字段中排序包含一个数组

时间:2017-04-19 09:38:09

标签: mongodb

我有一个集合,其中我以下面的格式存储数据我想在下面的集合中应用排序。

{
"job_count" : [ 
        ObjectId("58eb607531f78831a8894a3e"),
        ObjectId("58eb607531f78831a8894a3e"),
        ObjectId("58eb607531f78831a8894a3e")
    ]
},
{
"job_count" : [ 
        ObjectId("58eb607531f78831a8894a3e")
    ]
},
{
"job_count" : [ 
        ObjectId("58eb607531f78831a8894a3e"),
        ObjectId("58eb607531f78831a8894a3e")
    ]
}

我希望数据如下所示

{
    "job_count" : [ 
            ObjectId("58eb607531f78831a8894a3e"),
            ObjectId("58eb607531f78831a8894a3e"),
            ObjectId("58eb607531f78831a8894a3e")
        ]
    },
    {
    "job_count" : [ 
            ObjectId("58eb607531f78831a8894a3e"),
            ObjectId("58eb607531f78831a8894a3e")
        ]
    },
    {
    "job_count" : [ 
            ObjectId("58eb607531f78831a8894a3e")
        ]
    }

我的完整查询是

Jobs.aggregate(
            {"$match"  : $condArray},
            {"$unwind" : { path: "$mytradesmen.hired", preserveNullAndEmptyArrays: true}},
            {"$lookup" : {
                        "from":"users",
                        "localField":"mytradesmen.hired",
                        "foreignField":"_id",
                        "as": "user_details"
                    }
            },
            {"$unwind": { path: "$user_details", preserveNullAndEmptyArrays: true}},

            { "$sort" : {"job_count":-1}})

任何人都可以帮我弄清楚我应该修改的查询以获得预期的结果, 如果需要进一步的详细信息,请告诉我,我会相应地编辑我的问题

1 个答案:

答案 0 :(得分:2)

使用 $size 运算符创建一个额外字段,其中包含数组中元素的数量,然后在该字段上 $sort

Jobs.aggregate([
    {
        "$project": {
            "count": { "$size": "$job_count" },
            "job_count": 1
        }
    },
    { "$sort" : { "count": -1 } }
])
相关问题