通过MongoDB中的特定键获取排序数组

时间:2013-03-11 03:44:20

标签: php mongodb database

大家好,我有一个文档的结构是这样的:

{
    name : abc
    message:
    [{
         id: 4,
         status : 0,
         content : "abc"
     },
     {
         id: 2,
         status : 1,
         content : "abc"
     },
     {
         id: 1,
         status : 1,
         content : "abc"
     }
    ]
}

如何通过id键和status = 1获取已排序的消息数组 我的意思是

{
     id: 1,
     status : 1,
     content : "abc"
 },
 {
     id: 2,
     status : 1,
     content : "abc"
 },

非常感谢!

1 个答案:

答案 0 :(得分:1)

这个解决方案在mongo shell中,应该适合你。但Mongo 2.1以后支持聚合框架。 http://docs.mongodb.org/manual/applications/aggregation/

    db.yourcollection.aggregate([{$unwind:"$message"},{$match:{"message.status":1}},{$project:{_id:0,message:1}},{$sort:{"message.id":1}}])

由于您的消息键是一个数组,您必须首先使用$ unwind运算符,然后使用$ match运算符。

默认情况下,mongo将显示文档的_id。因此,如果您不想显示_id,则在匹配相关的_id之后,您可以使用$ project运算符

如果您不希望显示名称密钥,则只需在查询的项目部分中不指定名称密钥。默认情况下,mongo只显示值为1的键。如果未提及该键,则不会显示该键。

然后你使用$ sort运算符,1代表asecnding,-1代表降序。