【发布时间】:2016-02-14 14:35:42
【问题描述】:
在我的 Meteor 应用程序中,我有一组文档,其中包含一组子文档,如下所示:
/* 1 */
{
"_id" : "5xF9iDTj3reLDKNHh",
"name" : "Lorem ipsum",
"revisions" : [
{
"number" : 0,
"comment" : "Dolor sit amet",
"created" : ISODate("2016-02-11T01:22:45.588Z")
}
],
"number" : 1
}
/* 2 */
{
"_id" : "qTF8kEphNoB3eTNRA",
"name" : "Consecitur quinam",
"revisions" : [
{
"comment" : "Hoste ad poderiquem",
"number" : 1,
"created" : ISODate("2016-02-11T23:25:46.033Z")
},
{
"number" : 0,
"comment" : "Fagor questibilus",
"created" : ISODate("2016-02-11T01:22:45.588Z")
}
],
"number" : 2
}
我想要做的是查询这个集合并按照revisions 数组的created 字段中的最大日期 对结果集进行排序。一些我还没有完成的事情。我有一些限制:
- 仅按
revisions.created排序并不能减少它,因为从集合中使用的日期取决于排序方向。无论排序顺序如何,我都必须使用集合中的最大日期。 - 我不能依赖对未排序结果集的查询后操作,因此,这必须通过数据库的适当查询或聚合来完成。
- 无法保证
revisions数组会被预先排序。 - 在某些文档中可能有额外的字段,这些字段必须附带,所以请小心
$project。 - Meteor 仍在使用 MongoDB 2.6,较新的 API 功能不好:(
【问题讨论】:
-
在 shell 上,应该是
db.coll.find(yourQuery).sort({"revisions.created":-1})。我对流星一无所知,所以你需要自己翻译。 -
@Markus 当我按降序而不是升序排序时有效。然后它使用集合中的最小值。
-
嗯,泰国人正是你的问题所说的。您可能想改写它并更详细地描述问题。
-
@Markus 没错。立即编辑。
-
我还是不明白。您不会按特定日期排序。您按日期排序,升序或降序。是否有可能要查询共享最大日期的所有记录?
标签: mongodb meteor mongodb-query aggregation-framework