mongodb中的文档排序
假设我收集了四份文件:mongodb中的文档排序,mongodb,sorting,Mongodb,Sorting,假设我收集了四份文件: {u'a': {u'time': 3}} {u'a': {u'time': 5}} {u'b': {u'time': 4}} {u'b': {u'time': 2}} 是否可以按“a”和“b”文档中常见的“时间”字段对它们进行排序 谢谢您可以使用,以下代码已经过测试 db.test.aggregate({ $project: { time: { "$cond": [{ "$
{u'a': {u'time': 3}}
{u'a': {u'time': 5}}
{u'b': {u'time': 4}}
{u'b': {u'time': 2}}
是否可以按“a”和“b”文档中常见的“时间”字段对它们进行排序
谢谢您可以使用,以下代码已经过测试
db.test.aggregate({
$project: {
time: {
"$cond": [{
"$gt": ["$a.time", null]
}, "$a.time", "$b.time"]
}
}
}, {
$sort: {
time: -1
}
});
或者,如果您还希望返回原始字段:
或者,您可以在返回结果后,使用自定义的比较功能进行排序(未测试,仅供说明)
不,您应该将数据转换为公共格式,以便可以在公共字段中对其进行排序。如果需要,它仍然可以嵌套,但需要具有相同的路径 您可以使用
聚合框架
- 这里的技巧是将
作为所有文档的公共字段,以便$project
阶段可以使用该字段中的值对文档进行$sort
排序
- 操作员可用于检查
a.时间是否存在 则记录将按该值排序,否则按
b.time
不会被任何聚合管道
覆盖 创造索引
- 对于非常大的数据集,性能将非常差
{"a":1,"time":5}
{"b":1,"time":4}
这样,如果在时间
字段上创建索引,您的查询就可以使用索引
db.t.ensureIndex({"time":-1});
代码:
它不会对格式为{b:{time:2}}
的文档进行排序问题是我不能将“我的数据”放在一个通用格式中,因为它不是我的数据,而是给我的任何东西。“相同的路径”让我想起了几年前我看到的一个问题,mongodb是否会有类似XPath的查询。我想知道这个想法到底发生了什么所以。。。您可以创建索引(高效查询时间值需要该索引),但不能更改数据库中的数据?!??为什么呢?您对数据库有什么权限?您对系统中的其他代码有什么控制?谢谢大家的评论和建议。“对于非常大的数据集,性能将非常差。”这显然是一个阻碍。我不妨把申请表中的文件分类。至于数据本身,我没有发布真实的数据,因为首先这些是相当复杂的文档。我只是创建了一个简单的例子,它直指问题的核心,“在应用程序中对文档进行排序”——我想我已经建议了两个选项,包括这个选项。你认为这是你的解决方案吗?另一方面,如果您可以在客户端处理数据集,那么聚合方法的性能可能不会那么差。最后知道哪种方法最适合你会很有趣。
{"a":1,"time":5}
{"b":1,"time":4}
db.t.ensureIndex({"time":-1});
db.t.find({}).sort({"time":-1});