在mongodb中使用find()排序的字段

时间:2014-11-07 10:35:40

标签: mongodb mongodb-query aggregation-framework mongojs

所有! 我的文件有这样的结构:

{
    fname: value,
    lname: value,
    city: value
}

当我使用find()方法时,我得到默认顺序fname,lname,city的结果。 但是我希望得到其他字段顺序的结果,例如:city,fname,lname。 mongodb是否允许在结果中排​​序字段?

3 个答案:

答案 0 :(得分:1)

是和否。要真正进行这种操作,您需要aggregation framework。即便如此,因为你必须重命名"这些字段是为了改变他们的顺序。这是因为有一般的优化措施可以复制"复制"来自一个"管道的内容"阶段到另一个。这被认为是最佳的。

但你可以随时这样做:

db.collection.aggregate([
    { "$project": {
        "tcity": "$city",
        "tfname": "$fname",
        "tlname": "$lanme"
    }},
    { "$project": {
        "city": "$tcity",
        "fname": "$tfname",
        "lname": "$tlname"
    }}
])

非常做作,但这就是你必须这样做的方式。或者只是使用单个投影进行"重命名"字段按您想要的顺序,然后只是"重命名"再次在代码中。

当然,您的代码可以简单地重新映射"查询结果中的字段名称。

但基本的观点是MongoDB本身"保留"字段的原始顺序为"优化"它们如何存储,否则不会弄乱输出。如果您愿意,但您需要按照所示步骤执行此操作。

答案 1 :(得分:1)

您可以使用.sort()。例如:

db.stocks.find().sort( { ticker: 1, date: -1 } )

有关详细信息,请参阅http://docs.mongodb.org/manual/reference/method/cursor.sort/

答案 2 :(得分:0)

我假设您指的是Mongo shell中显示的输出?如果是这样,你可以将返回的输出分配给一个变量(光标,我相信),然后逐步浏览光标,同时以你喜欢的任何顺序输出各个字段变量。