在mongodb

时间:2016-02-05 14:03:35

标签: mongodb sorting

我已经在谷歌/ SO / mongo文档中看到了这个问题,我已经尝试过实施解决方案,但它并不适合我。我有以下测试数据库:

> db.test.find().pretty()
{
    "_id" : ObjectId("56b4ab167db9acd913ce6e07"),
    "state" : "HelloWorld",
    "items" : [
        {
            "guid" : "123"
        },
        {
            "guid" : "124"
        },
        {
            "guid" : "123"
        }
    ]
}

我希望按照" guid"项目元素。运行sort命令会产生:

> db.test.find().sort( {"items.guid" : 1}).pretty()
{
    "_id" : ObjectId("56b4ab167db9acd913ce6e07"),
    "state" : "HelloWorld",
    "items" : [
        {
            "guid" : "123"
        },
        {
            "guid" : "124"
        },
        {
            "guid" : "123"
        }
    ]
}

我如何按照" guid"排序?元素,以便返回" items"的输出是123,123和124 guids(基本上移动"项目&#34的子元素;以便它们按" guid"排序)?

编辑:我还尝试使用$orderby命令,没有达到我的目标:

> db.test.find({ $query : {}, $orderby: {'items.guid' : 1}  }).pretty()
{
    "_id" : ObjectId("56b4ab167db9acd913ce6e07"),
    "state" : "HelloWorld",
    "items" : [
        {
            "guid" : "123"
        },
        {
            "guid" : "124"
        },
        {
            "guid" : "123"
        }
    ]
}

1 个答案:

答案 0 :(得分:0)

以下是使用aggregate

完成的方法
db.test.aggregate([
    {
        $unwind : '$items'
    },
    {
        $sort : {'items.guid' : 1}
    },
    {
        $group : {
            _id : '$_id',
            state : {$first : '$state'},
            items : {
                $push : {'guid' : '$items.guid'}
            }
        }
    }
]).pretty()

这是此命令的输出。

{
    "_id" : ObjectId("56b4ab167db9acd913ce6e07"),
    "state" : "HelloWorld",
    "items" : [
        {
            "guid" : "123"
        },
        {
            "guid" : "123"
        },
        {
            "guid" : "124"
        }
    ]
}