gpt4 book ai didi

node.js - 如何从 MongoDB 聚合的输出中获取数组

转载 作者:可可西里 更新时间:2023-11-01 10:39:45 25 4
gpt4 key购买 nike

我在 MongoDB 中有文档,如下所示:

{
"_id" : ObjectId("5a748c8b178227d602ec9ce8"),
"dateHour" : ISODate("2018-02-02T16:00:00.000Z"),
"data" : [
{
"date" : ISODate("2018-02-02T16:06:35.033Z"),
"cap" : 437105726836.0
},
{
"date" : ISODate("2018-02-02T16:09:25.127Z"),
"cap" : 437316498502.0
},
...
]
}

使用聚合方法(在 NodeJS 中):

db.getCollection('hourly').aggregate([
{$match: {}},
{$unwind: "$data"},
{$project: {_id: 0, date: "$data.date", cap: "$data.cap" } }
])

我得到如下输出:

[
{
"date" : ISODate("2018-02-02T16:06:35.033Z"),
"cap" : 437105726836.0
},
{
"date" : ISODate("2018-02-02T16:09:25.127Z"),
"cap" : 437316498502.0
}
]

问题:获得如下输出的最有效方法是什么:

[
[ISODate("2018-02-02T16:06:35.033Z"), 437105726836.0],
[ISODate("2018-02-02T16:09:25.127Z"), 437316498502.0]
]

?

我可以简单地添加 .map(function(item) {return [item.date, item.cap]}) 但这是处理大量数据时最有效的方法吗?

最佳答案

$map$reduce 试试 $project

$ map

db.col.aggregate(
[
{$project : {
_id : 0,
data : {$map : {input : "$data", as : "d", in : ["$$d.date", "$$d.cap"]}}
}
}
]
)

$减少

db.col.aggregate(
[
{$project : {
_id : 0,
data : {$reduce : {input : "$data", initialValue : [], in : {$concatArrays : ["$$value", [["$$this.date", "$$this.cap"]]]}}}
}
}
]
).pretty()

输出

{
"data" : [
[
ISODate("2018-02-02T16:06:35.033Z"),
437105726836
],
[
ISODate("2018-02-02T16:09:25.127Z"),
437316498502
]
]
}

关于node.js - 如何从 MongoDB 聚合的输出中获取数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48589316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com