获取每个 ID 组范围内的最后日期

Yox2l

假设我有一个包含以下项目的集合:

[{myId:0,date:01.01.17,data:1000},
 {myId:1,date:01.02.17,data:2000},
 {myId:0,date:01.03.17,data:3000},
 {myId:1,date:01.04.17,data:4000},
 {myId:0,date:01.05.17,data:5000}]

我想创建一个查询,该查询获取一个日期作为参数,并为 evrey myId 返回一个具有单个对象的数组,该数组的最大日期低于所请求的日期。

例如使用 15.03.17 日期返回调用查询:

[{myId:1,date:01.02.17,data:2000},
 {myId:0,date:01.03.17,data:3000}]

并使用 15.01.17 日期返回调用查询

[{myId:0,date:01.01.17,data:1000}]

我正在寻找一个不使用 db.eval 的答案

尼尔伦

修复您的数据以使其有效:

db.junk.insertMany([
 {myId:0,date: new Date("2017-01-01"),data:1000},
 {myId:1,date: new Date("2017-02-01"),data:2000},
 {myId:0,date: new Date("2017-03-01"),data:3000},
 {myId:1,date: new Date("2017-04-01"),data:4000},
 {myId:0,date: new Date("2017-05-01"),data:5000}
])

您运行聚合语句,通过 过滤条目$match,然后应用$sort以确保顺序并使用$last每个分组边界上的“最大值”:

db.junk.aggregate([
  { "$match": { "date": { "$lte": new Date("2017-03-15") } } },
  { "$sort": { "date": 1 } },
  { "$group": {
    "_id": "$myId",
    "date": { "$last": "$date" },
    "data": { "$last": "$data" }  
  }}
])

返回:

/* 1 */
{
    "_id" : 1.0,
    "date" : ISODate("2017-02-01T00:00:00.000Z"),
    "data" : 2000.0
}

/* 2 */
{
    "_id" : 0.0,
    "date" : ISODate("2017-03-01T00:00:00.000Z"),
    "data" : 3000.0
}

对于另一个日期:

db.junk.aggregate([
  { "$match": { "date": { "$lte": new Date("2017-01-15") } } },
  { "$sort": { "date": 1 } },
  { "$group": {
    "_id": "$myId",
    "date": { "$last": "$date" },
    "data": { "$last": "$data" }  
  }}
])

返回:

/* 1 */
{
    "_id" : 0.0,
    "date" : ISODate("2017-01-01T00:00:00.000Z"),
    "data" : 1000.0
}

如果你真的必须,你可以添加一个$sort作为最后的管道阶段,以确保_id( myIdvalue) 返回的顺序

db.junk.aggregate([
  { "$match": { "date": { "$lte": new Date("2017-03-15") } } },
  { "$sort": { "date": 1 } },
  { "$group": {
    "_id": "$myId",
    "date": { "$last": "$date" },
    "data": { "$last": "$data" }  
  }},
  { "$sort": { "_id": 1 } }
])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何返回日期范围内每个日期包含非空值的所有ID?

来自分类Dev

获取每个 post_id 的最后结果

来自分类Dev

按语句sqlite获取组中每个组的ID列表

来自分类Dev

T-SQL-获取每个ID的最后30行

来自分类Dev

T-SQL-获取每个ID的最后30行

来自分类Dev

获取每个不同ID的最后一条记录

来自分类Dev

获取每个唯一 ID 的最后 5 行的总和

来自分类Dev

MongoDB:按日期/时间获取每个ID的最新完整文档

来自分类Dev

如何获取每个日期的每种类型的最大ID

来自分类Dev

获取特定日期范围内每个月的行数

来自分类Dev

获取日期范围内的扣除结果

来自分类Dev

获取日期范围内的数组元素

来自分类Dev

获取日期范围内的数组元素

来自分类Dev

获取日期范围内的of日数量

来自分类Dev

获取日期范围内的季节

来自分类Dev

获取日期范围内的扣除结果

来自分类Dev

获取每个 id 的一个结果,但只获取最新日期的结果

来自分类Dev

更新查询,其中我要获取最新日期时间的每个ID都有ID列表

来自分类Dev

计算日期范围内每个日期的销售数量,PostgreSQL

来自分类Dev

MySQL从多个获取最后日期记录

来自分类Dev

Pyspark获取每天的最后日期时间

来自分类Dev

MySQL从多个获取最后日期记录

来自分类Dev

PostgreSQL:如何在给定的日期范围内为每个帐户选择最后一个余额?

来自分类Dev

获取每个ID的第二个最新日期,而不是最新的日期

来自分类Dev

在SQL表中获取每个用户ID的最后一个元素

来自分类Dev

python获取日期,如果它在日期范围内

来自分类Dev

使用JavaScript获取日期范围内的特定日期

来自分类Dev

Windows 10-获取日期范围内每天的首次登录和最后一次注销

来自分类Dev

从查找表中获取每种类型和每个日期的最大ID

Related 相关文章

  1. 1

    如何返回日期范围内每个日期包含非空值的所有ID?

  2. 2

    获取每个 post_id 的最后结果

  3. 3

    按语句sqlite获取组中每个组的ID列表

  4. 4

    T-SQL-获取每个ID的最后30行

  5. 5

    T-SQL-获取每个ID的最后30行

  6. 6

    获取每个不同ID的最后一条记录

  7. 7

    获取每个唯一 ID 的最后 5 行的总和

  8. 8

    MongoDB:按日期/时间获取每个ID的最新完整文档

  9. 9

    如何获取每个日期的每种类型的最大ID

  10. 10

    获取特定日期范围内每个月的行数

  11. 11

    获取日期范围内的扣除结果

  12. 12

    获取日期范围内的数组元素

  13. 13

    获取日期范围内的数组元素

  14. 14

    获取日期范围内的of日数量

  15. 15

    获取日期范围内的季节

  16. 16

    获取日期范围内的扣除结果

  17. 17

    获取每个 id 的一个结果,但只获取最新日期的结果

  18. 18

    更新查询,其中我要获取最新日期时间的每个ID都有ID列表

  19. 19

    计算日期范围内每个日期的销售数量,PostgreSQL

  20. 20

    MySQL从多个获取最后日期记录

  21. 21

    Pyspark获取每天的最后日期时间

  22. 22

    MySQL从多个获取最后日期记录

  23. 23

    PostgreSQL:如何在给定的日期范围内为每个帐户选择最后一个余额?

  24. 24

    获取每个ID的第二个最新日期,而不是最新的日期

  25. 25

    在SQL表中获取每个用户ID的最后一个元素

  26. 26

    python获取日期,如果它在日期范围内

  27. 27

    使用JavaScript获取日期范围内的特定日期

  28. 28

    Windows 10-获取日期范围内每天的首次登录和最后一次注销

  29. 29

    从查找表中获取每种类型和每个日期的最大ID

热门标签

归档