Arrays 获取查询的最后一个元素后合并数组

Arrays 获取查询的最后一个元素后合并数组,arrays,mongodb,date,mongodb-query,Arrays,Mongodb,Date,Mongodb Query,您好,我正在查询一个嵌套的日期,它确实返回一个数组,如何聚合每个数组的最后一项 db.ft.find({ "published.dateTime": { $gte: ISODate("2014-01-01"), $lt: ISODate("2020-02-01")}}, { drafts: 1, _id: 0 }) 这是回报 /* 1 */ { "drafts" : [ 104493, 162076, 161034,

您好,我正在查询一个嵌套的日期,它确实返回一个数组,如何聚合每个数组的最后一项

db.ft.find({ "published.dateTime": {
    $gte: ISODate("2014-01-01"), $lt: ISODate("2020-02-01")}}, { drafts: 1, _id: 0 })
这是回报

/* 1 */
{
    "drafts" : [ 
        104493, 
        162076, 
        161034, 
        186662
    ]
}

/* 2 */
{
    "drafts" : [ 
        118987, 
        173786
    ]
}

/* 3 */
{
    "drafts" : [ 
        11993, 
        173787
    ]
}
理想情况下,我需要一个带有[186662173786173787]的数组

[编辑1]


我尝试了
{“drafts”:{$slice:-1}
它确实有效,但我得到了整个对象

如果希望将所有文档中的
drafts
元素拉入一个数组,则需要使用:


测试:

感谢您在我添加匹配项时出于某种原因,它不起作用:/@rad:您在这里输入了一个错误:
“published.dateTime”
应该是
“published.dataTime”
。测试:()
db.collection.aggregate([
  /** Your filter condition go in here */
  {
    $match: {} 
  },
  /** Re-create drafts field with last element from 'drafts' array */
  {
    $addFields: { "drafts": { $arrayElemAt: [ "$drafts", -1 ] } }
  },
  /** group on empty string '' or null to group all docs without any filter &
   * push value of 'drafts' field from all docs to new 'drafts' field */
  {
    $group: { _id: "", drafts: { $push: "$drafts" } }
  },
  /** Optional, remove `_id :''` from response */
  {
    $project: { _id: 0 }
  }
])