Javascript 在MongoDB中获取聚合数据
下面是上图中提供的mongo DB文档结构。在这里,您可以看到我们在pages array下有一个xmlRequests数组(pages是对象数组)。因此,每个会话都有包含一些对象的pages数组 我想做什么:Javascript 在MongoDB中获取聚合数据,javascript,database,mongodb,aggregation-framework,Javascript,Database,Mongodb,Aggregation Framework,下面是上图中提供的mongo DB文档结构。在这里,您可以看到我们在pages array下有一个xmlRequests数组(pages是对象数组)。因此,每个会话都有包含一些对象的pages数组 我想做什么: { pages : [] // array containing all the objects of request arrays under each session. } 假设我们有10个与上图所示结构相同的文档。我想要一个数组中所有会话下所有页面的聚合(统一)数组。简单地说,
{
pages : [] // array containing all the objects of request arrays under each session.
}
假设我们有10个与上图所示结构相同的文档。我想要一个数组中所有会话下所有页面的聚合(统一)数组。简单地说,我想要一个数组中所有会话的pages数组(聚合)
像这样:
{
pages : [] // array containing all the objects of request arrays under each session.
}
我需要一个统一的requests[]数组,其中包含单个数组中所有会话的所有请求。我尝试使用db.collection.aggregate([])但我不知道如何获取文档中的嵌套值,并将它们统一到一个对象数组中
Mongo代码段
{
"user": "abc",
"sessions": {
"12345": {
"pages": [
{
requests: [ {name: 'request1'}]
}
]
},
"23456": {
"pages": [
{
requests: [ {name: 'request1'}]
}
]
}
}
}
{
"user": "xyz",
"sessions": {
"12345": {
"pages": [
{
requests: [ {name: 'request1'}]
}
]
},
"23456": {
"pages": [
{
requests: [ {name: 'request1'}]
}
]
}
}
}
获取集合中的所有请求数组并将它们合并到一个数组中尝试一下。基本上,我们展开第一个数组页面,这样我们就得到了一个巨大的页面列表。然后,我们将所有xml请求数组分组到一个大数组中。然后我们将它们合并到一个数组中,并返回一个包含最终数组的键的对象
.aggregate([{
$unwind: “$pages”,
},
{
$group: {
_id: null,
xmlRequests: { $push: "$xmlRequests"}
}
},
{
$project: {
_id: 0,
requests: {
$reduce: {
input: "$xmlRequests",
initialValue: [],
in: {
$concatArrays: [ "$$this", "$$value"]
}
}
}
}
}])
可以从开始,以便从未知键检索值。然后,需要两个/对来展平阵列阵列。可用于将所有请求收集到单个文档中:
db.collection.aggregate([
{
$project: {
pages: {
$reduce: {
input: { $objectToArray: "$sessions" },
initialValue: [],
in: {
$concatArrays: [
"$$value",
{
$reduce: {
input: "$$this.v.pages",
initialValue: [],
in: { $concatArrays: [ "$$value", "$$this.requests" ] }
}
}
]
}
}
}
}
},
{
$group: {
_id: null,
pages: { $push: "$pages" }
}
},
{
$project: {
pages: {
$reduce: {
input: "$pages",
initialValue: [],
in: { $concatArrays: [ "$$value", "$$this" ] }
}
}
}
}
])
能否将样本数据粘贴为代码而不是图像?谢谢@mickl你能检查一下我添加了什么吗?你想要每个用户的所有会话还是一个包含所有用户会话的文档?@mickl一个包含所有会话id页面下所有请求的文档。不是会话,而是每个会话的pages数组中的请求对@mickl有很大帮助