2013-03-11 50 views
0

大家好我有一个文件的结构类似:获得通过特定的按键有序排列在MongoDB中

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

我怎样才能获得通过ID键和状态= 1 我的意思是

排序消息阵列
{ 
    id: 1, 
    status : 1, 
    content : "abc" 
}, 
{ 
    id: 2, 
    status : 1, 
    content : "abc" 
}, 

非常感谢!

回答

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}}]) 

由于您的留言关键是你必须先使用$开卷操作,然后使用$匹配运算符的数组。

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

如果您不希望显示名称键,则不要指定名称键查询的项目部分。默认情况下,mongo只会显示值为1的键。如果没有提及键,它将不会显示它。

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

+0

非常感谢你安! – 2013-03-11 08:15:12

+0

@ tunghk_54如果答案适合你,你可以标记它! :) – ann 2013-03-11 16:20:35