【问题标题】:Python Mongo Sorting based on field within a field基于字段内字段的Python Mongo排序
【发布时间】:2013-07-17 22:13:14
【问题描述】:

我有以下形状的条目:

{
    outerField1 : {
                     "innerField" : 1
                 }
    outerField2 : "blah"
}

我想根据 innerField 对它们进行降序排序,但我对 sort 函数的理解仅限于知道如何根据外部字段进行排序。如何根据内部字段对 mongo 查询进行排序?

【问题讨论】:

  • 好问题!你有没有尝试过?
  • 我尝试过 sort({'o' : {'autoLaunched' : 1 }}) 之类的东西,但到目前为止还没有结果。仍在寻找可能的答案。

标签: python mongodb sorting pymongo


【解决方案1】:

可以使用dot notation(例如outerfield1.innerField)访问文档中的子字段。

在 Mongo shell 中,您可以使用以下命令进行排序:

sort({'outerField1.innerField': -1})

如果您使用的是 Python,则可能需要改为:

sort([("outerField1.innerField": -1)])

你需要这样做的原因是 Python 的 dict 是一个无序的数据结构。详情见:https://stackoverflow.com/a/10242305/117919

【讨论】:

  • 这给了我一个错误: raise TypeError("if no direction is specified, " TypeError: if no direction is specified, key_or_list must be an instance of list
  • 降序为:sort({'outerField1.innerField':-1}) -1 表示降序。
  • 这有帮助,现在的问题是我的数据集太大而无法在没有索引的情况下进行排序。我会用 $gt 来限制它,看看是否有帮助。
  • 您可以使用相同的点表示法从innerField 创建索引:docs.mongodb.org/manual/core/indexes/#secondary-indexes
  • 另外,如果您并非始终存在 innerField 值,请考虑使用稀疏索引:docs.mongodb.org/manual/core/indexes/#index-type-sparse
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多