gpt4 book ai didi

node.js - 用 Mongoose 计算嵌套数组

转载 作者:可可西里 更新时间:2023-11-01 10:42:55 24 4
gpt4 key购买 nike

我在 node.js 应用程序中通过 mongoose 使用 mongoDB。

在我的数据库中,我有这种通用格式:

书籍:

BookSchema = {
variousData,
//Books contain pages
pages: [{type: pageSchema}]
}

页面:

pageSchema = {
variousData,
//Pages contain frames
frames: [frameSchema]
}

框架:

frameSchema = {
variousData
}

我想编写一个计数查询来计算所有书籍所有页面的总帧数。

所以如果我的数据库中有这个内容:

    Book1 = {
data:data,
pages: [
{data:data,
frames: [frame1,frame2,frame3]
},
{data:data,
frames: [frame1,frame2,frame3]
},
{data:data,
frames: [frame1,frame2,frame3]
}
]
}

    Book2 = {
data:data,
pages: [
{data:data,
frames: [frame1,frame2]
},
{data:data,
frames: [frame1,frame2]
},
{data:data,
frames: [frame1,frame2]
}
]
}

我期望得到 15 的最终结果(第 1 册中有 9 帧,第 2 册中有 6 帧)

我所有的尝试都以错误告终。

我可以写一个循环,但我觉得 mongoose 会有更好的选择。

有什么建议吗?

谢谢大家!

最佳答案

最有效的方法是这样的:

  Book.aggregate([
{ "$project": {
"pages": {
"$map": {
"input": "$pages",
"as": "page",
"in": { "$size": "$$page.frames" }
}}
}},
{ "$unwind": "$pages" },
{ "$group": {
"_id": null,
"pages": { "$sum": "$pages" }
}}
],function(err,results) {

})

基本上有 $map运算符允许您遍历“pages”数组的元素,查看每个“frames”数组并返回 $size .现在“页面”的内容只是每个“框架”的大小数组,因此也是计数。

然后您真正需要做的就是将它们“相加”。所以你$unwind数组和 $sum每个框架的所有页面计数以及 $group .

关于node.js - 用 Mongoose 计算嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32198447/

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