MongoDB聚合和分页

时间:2015-11-08 18:30:09

标签: mongodb mongodb-query

我在每个文档中都有我的内部id字段的文档和添加此文档的日期。可能有多个具有相同ID的文档(同一文档的不同版本),但这些文档的日期总是不同的。我想在一些查询中,只带来与指定日期相关的同一文档的所有版本(具有相同的id字段)的一个文档,并且我想用分页显示它们(页面中有50行)。那么,有没有机会在MongoDB中执行此操作(操作 - 通过某些字段查询文档,按id字段对它们进行分组,按日期字段排序,只取第一个,所有这些都应该使用分页。)?

请参阅示例:这些是文档,其中一些是不同的文档,如文档A,B和C,还有一些是相同文档的版本, 像_id:1,2和3都是同一文件的版本A

文件A { _id:1, “id”:“A”, “作者”:“价值”, “日期”:“2015-11-05” }

文件A { _id:2, “id”:“A”, “作者”:“价值”, “日期”:“2015-11-06” }

文件A { _id:3, “id”:“A”, “作者”:“价值”, “日期”:“2015-11-07” }

文件B { _id:4, “id”:“B”, “作者”:“价值”, “日期”:“2015-11-06” }

文件B { _id:5, “id”:“B”, “作者”:“价值”, “日期”:“2015-11-07” }

文件C { _id:6, “id”:“C”, “作者”:“价值”, “日期”:“2015-11-07” }

我想查询“作者”字段中具有“值”的所有文档。 并从这些文件中只带来一份最新日期的文件  指定日期,例如2015-11-08。所以,我希望结果如下:  _id:3,_id:5,_id:6  还有分页,例如每页10个文档。

谢谢!!!!!

1 个答案:

答案 0 :(得分:0)

  1. 两个文件不能具有相同的_id。默认情况下,_id上有唯一索引。
  2. 根据1.您需要一个复合_id字段,其中包含日期:
  3.     {
          "_id":{
            docId: yourFormerIdValue,
            date: new ISODate()
          }
          // other fields
        }
    
    1. 要使版本在指定日期有效,查询会变得相当简单:

      db.yourColl.find({ 
        "_id":{
          "docId": idToFind,
          // get only the version valid up to a specific date...
          "date":{ "$lte": someISODate }
        }
      })
      // ...sort the results descending...
      .sort("_id.date":-1)
      // ...and get only the first and therefor newest entry
      .limit(1)