【问题标题】:Fields ordering using find() in mongodb在 mongodb 中使用 find() 进行字段排序
【发布时间】:2015-05-09 00:43:39
【问题描述】:

全部! 我的文档有这样的结构:

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

当我使用 find() 方法时,我会得到默认顺序 fname、lname、city 的结果。 但我想以其他字段顺序获得结果,例如:city、fname、lname。 mongodb 是否允许对结果中的字段进行排序?

【问题讨论】:

  • 我很好奇你为什么关心字段的顺序。您可能正在尝试解决错误的问题。

标签: mongodb mongodb-query aggregation-framework mongojs


【解决方案1】:

是和不是。要真正进行这种操作,您需要aggregation framework。即使这样也有点棘手,因为您必须“重命名”字段才能更改它们的顺序。这是因为存在将内容从一个“管道”阶段“复制”到另一个阶段的一般优化。这被认为是最优的。

但你总是可以这样做:

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

非常做作,但你必须这样做。或者,只需按照您想要的顺序对“重命名”字段进行单个投影,然后在代码中再次“重命名”。

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

但基本点是 MongoDB 本身“保留”字段的原始顺序作为对它们存储方式的“优化”,否则不会混淆输出。如果您愿意,可以,但您需要按照所示的步骤进行操作。

【讨论】:

  • 但是这个投影会默认排序还是我们需要调用sort()方法。
  • @vmr 字段顺序和结果排序是两个不同的东西。排序应用于内容而不是字段名称。我认为这里的普遍共识是,虽然您“可以”强制 MongoDB 以特定顺序输出字段,但您“应该”处理的一般方式是“在”返回结果之后。我只是表明你“可以”表明这样做很荒谬。
【解决方案2】:

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

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

欲了解更多信息,请参阅http://docs.mongodb.org/manual/reference/method/cursor.sort/

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 2020-04-13
      • 2017-06-03
      • 2015-12-13
      • 2020-09-27
      • 1970-01-01
      • 2019-03-30
      相关资源
      最近更新 更多