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 }
}
])