aggregation-framework 相关问题

MongoDB聚合框架提供了一种在MongoDB 2.2+中重塑和聚合数据的方法。

MongoDB 聚合并查找具有多个数组的对象

我有一个包含对象的集合,每个对象都包含多个数组。例如 组件:{ 机械项目:[{ 机械 ID: 我有一个包含对象的集合,每个对象都包含多个数组。例如 assmemblies: { mechanicalItems: [{ mechanicalId: <ObjectId that references the mechanicalitems collection>, quantity: Number }], electricalItems: [{ mechanicalId: <ObjectId that references the mechanicalitems collection> quantity: Number }], 我正在尝试执行查找,以将 mechanicalitems 和 electricalitems 中的所有字段放入程序集集合中,但很难使 $lookup 工作。 当我尝试展开和分组时,我丢失了另一个数组,或者它最终嵌套在另一个数组的每个数组对象内。 我也尝试直接投影回数量属性,但我得到的是所有数量的数组: { $lookup: { from: "mechanicalitems", let: { mechanicalItem: "$mechanicalItems", item: "$machanicalItems.mechanicalId", }, pipeline: [ { $match: { $expr: { $in: ["$_id", "$$item"], }, }, }, { $project: { "quantity": "$$mechanicalItem.quantity" // <-- this gives an array of all the quantities } }, ], as: "mechanicalItems", }, }, 我尝试了一些其他选项,但无法完全得到我正在寻找的东西。 *** 编辑 - 预期输出 如果我的 mechanicalItems 字段是:“尺寸”、“材料”、“风格”,我的 electricalItems 字段是:“当前”、“评级”、“绝缘”,那么我的预期输出是: assemblies: { mechanicalItems: [{ item: { _id: <some ObjectId> size: '12', material: 'steel', style: 'thick' }, quantity: Number }, ... ], electricalItems: [{ item: { _id: <some ObjectId> current: '15', rating: 'low voltage', insulation: 'PVC' }, quantity: Number }, ... ] } 我希望将 mechanicalItemId 替换为 MechanicalItems 集合中的实际对象(并最终将该字段重命名为“item”,但我可以稍后使用 $addFields 或 $project 来做到这一点)。 有一个拼写错误:$machanicalItems.mechanicalId,应该是$mechanicalItems.mechanicalId。 mechanicalItem.quantity 返回一个数字数组,因为 mechanicalItem 是一个数组。相反,您需要获取 quantity 数组的匹配文档的单个 mechanicalItem 值,并将其设置到 quantity 字段。 db.assemblies.aggregate([ { $lookup: { from: "mechanicalitems", let: { mechanicalItem: "$mechanicalItems", item: "$mechanicalItems.mechanicalId" }, pipeline: [ { $match: { $expr: { $in: [ "$_id", "$$item" ] } } }, { $set: { "quantity": { $first: { $map: { input: { $filter: { input: "$$mechanicalItem", cond: { $eq: [ "$_id", "$$this.mechanicalId" ] } } }, in: "$$this.quantity" } } } } } ], as: "mechanicalItems" } } ]) 当您查找与 electricalItems 集合的连接时,electricalItems 数组的逻辑是相同的。 演示@Mongo Playground

回答 1 投票 0

MongoDB 聚合:查找每个月相交的日期范围数量

问题 我想仅使用 MongoDB 聚合来执行任务,而不需要额外的代码。这与我们运行聚合的环境有关。 我们有一个用户集合。在我们的应用程序中,用户可以...

回答 1 投票 0

如何忽略 MongoDB $eq 数字聚合运算符的类型比较?

$eq 运算符比较 MongoDB 中的值和类型,如 https://www.mongodb.com/docs/manual/reference/operator/aggregation/eq 中所述。 有没有什么方法可以忽略类型比较...

回答 1 投票 0

如何忽略 MongoDB $eq 数字聚合运算符的类型比较?

$eq 运算符比较 MongoDB 中的值和类型,如 https://www.mongodb.com/docs/manual/reference/operator/aggregation/eq 中所述。 有没有什么方法可以忽略类型比较...

回答 1 投票 0

如何使用一组 ids 计算一个集合中的金额并更新另一个集合中的字段?

愚蠢的是,我同意为我们在工作中举办的梦幻一级方程式比赛建立一个网站。 我是 mongobd 的新手,我对如何更新每个玩家的总积分感到困惑......

回答 1 投票 0

MongoDB:$union具有单个值

我有两个收藏。我需要获取集合 A 中某个字段的最高值,并查找集合 B 中与其字段之一的该值不匹配的所有文档。我怀疑 $unionWith 是...

回答 1 投票 0

MongoDB:就地对嵌套数组的元素进行分组

想知道如何使用聚合管道按类型对过程数组进行就地分组。 所以转向这个: [ { “机场”:“MSP”, “国家”...

回答 1 投票 0

有什么方法可以为 mongoose.js 聚合提供 allowedDiskUse 选项吗?

我正在对大约 300k+ 条记录的集合运行聚合,这需要多次展开和重新组合。我遇到了以下错误; '例外:超出了 $group 的内存限制,但是...

回答 4 投票 0

根据 MongoDb 中的字段值将数据从一个集合保存到另一个集合

我有两个集合,一个是优惠券,另一个是用户。因此,在我的应用程序中,我想根据用户电子邮件分配优惠券。现在,在我的优惠券集合中,我想存储用户信息(来自

回答 1 投票 0

MongoDB:如何在 insertOne() 期间设置时间戳,而不像 PostgreSQL 中的 NOW() 那样为 insertOne() 使用 new Date()

时间:{ $currentDate:{ $type:“时间戳” } } }); 它不适用于 insert() 你能帮我吗,有人吗?

回答 1 投票 0

MongoDB 中的字符串聚合

我收集了以下文件: { “ID”: ..., “关键”:47 }, { “ID”: ..., “钥匙”:12 } 我想将整个集合聚合到一个

回答 1 投票 0

NodeJS MongoDB CSFLE 聚合替换根错误

我在以下查询中收到此错误: 注意:打孔集合未加密,也没有任何加密的 CSLFE, 我有另一个包含 CSLFE 查询加密字段的集合。 仅供您参考,如果...

回答 1 投票 0

MongoDB/Mongoose 查询:检索从位置 A 到位置 B 的具有优先级约束的路由

我正在使用 Mongoose 开发 MongoDB 项目,并且在查询路由文档时遇到了挑战。每个路由文档的结构如下: const locationSchema = 新猫鼬....

回答 1 投票 0

MongoDB 将两个字段中的字符串连接到第三个字段中

如何连接两个字符串字段中的值并将其放入第三个字符串字段中? 我试过这个: db.collection.update( { "_id": { $exists: true } }, { $set: { column_2: { $add: ['$column_4', '$

回答 9 投票 0

$filter 位于数组中的 $reduce 内或 $map 内,无需展开

我需要一些帮助: 我想优化此查询以使其更快,它需要按 events.eventType:"log" 与 server:"strong" 的所有文档进行过滤,但没有单独的展开和过滤器

回答 2 投票 0

如何在具有不同对象顺序的对象数组上使用 $setUnion 来更新文档

我有这个文件: { "_id": "65b294740c5693e3deac0cea", “名称”:“伊朗伊斯兰共和国”, “人口”:95000000, “abb”:&qu...

回答 1 投票 0

如何在具有不同对象顺序的对象数组上使用 $setUnion 来更新文档

我有这个文件: { "_id": "65b294740c5693e3deac0cea", “名称”:“伊朗伊斯兰共和国”, “人口”:95000000, “abb”:&qu...

回答 1 投票 0

MongoDB v4.4 聚合的 $getField 的替代方案

我正在使用 Atlas App Services,它仅支持 MongoDB v4.4,并且不包含 $getField 作为聚合运算符。我需要访问表达式返回的对象的字段,并感觉...

回答 1 投票 0

如何在mongodb中通过查找有限制的项目来匹配并跳过

我有 2 个集合,分别是 users 和 user_courses。 user_courses集合是一个多对多的连接表。我需要通过分页注册课程来过滤用户。 用户集合看起来像:...

回答 1 投票 0

MongoDB聚合查询;:查找计数大于1的文档

场景 如果集合中存在超过 1 次出现的 uniquekey 字段,则查找文档并返回特定字段。在示例数据中,uniqueKey 100 和 800 的数量超过 1

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.