MongoDB聚合:通过动态字段路径从嵌入式文档添加字段

编程入门 行业动态 更新时间:2024-10-21 18:29:36
本文介绍了MongoDB聚合:通过动态字段路径从嵌入式文档添加字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个聚合管道,被困在一个舞台上.此时,我有一个以下格式的文档:

I have an aggregation pipeline and am stuck on a stage. At this point I have a document in the following format:

{ _id:ObjectId(5e3d326637df7e4dda73ec22), levelName:"Level 1", levelNames: { "Level 1":"5e567993b6ed4b7b4d2c044d" "Level 2":"5e567996a7826d45f836dfa3" "Level 3":"5e5679991f515a01c73e9006" } }

我想添加一个$ addField/$ set阶段,该阶段为我提供levelNames对象中条目的ID值,并带有与根文档的levelName属性匹配的键.

and I want to add an $addField/$set stage which gives me the ID value of the entry in the levelNames object with a key matching the levelName property of the root document.

我一直在尝试使用某种动态字段路径($ concat:["levelNames.","$ levelName"]),但是没有运气.这是我的$ addField阶段:

I've been trying to use some sort of dynamic field path ($concat: ["levelNames.", "$levelName"]) but have had no luck. This is my $addField stage:

/** * newField: The new field name. * expression: The new field expression. */ { currentLevelId: { $let: { vars: { levelPath: { $concat: ["levelNames.", "$levelName"] } }, in: { currentLevelId: "$$levelPath" } } } }

我得到的结果是:

{ _id:ObjectId(5e3d326637df7e4dda73ec22), levelName:"Level 1", levelNames: { "Level 1":"5e567993b6ed4b7b4d2c044d" "Level 2":"5e567996a7826d45f836dfa3" "Level 3":"5e5679991f515a01c73e9006" } currentLevelId: { currentLevelId:"levelNames.Level 1" } }

我正在尝试将currentLevelId的结果设置为"5e567993b6ed4b7b4d2c044d",所以我想要的输出是:

I'm trying to get the result of currentLevelId to be "5e567993b6ed4b7b4d2c044d", so my desired output is:

{ _id:ObjectId(5e3d326637df7e4dda73ec22), levelName:"Level 1", levelNames: { "Level 1":"5e567993b6ed4b7b4d2c044d" "Level 2":"5e567996a7826d45f836dfa3" "Level 3":"5e5679991f515a01c73e9006" }, currentLevelId: "5e567993b6ed4b7b4d2c044d" }

有没有办法做到这一点?

Is there a way this can be achieved?

推荐答案

使用此选项:

db.collection.aggregate([ { $set: { data: { $objectToArray: "$levelNames" } } }, { $set: { currentLevelId: { $arrayElemAt: ["$data.v", { $indexOfArray: ["$data.k", "$levelName"] }] } } }, { $unset: "data" } ])

蒙戈游乐场

更多推荐

MongoDB聚合:通过动态字段路径从嵌入式文档添加字段

本文发布于:2023-11-22 20:41:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1618943.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字段   嵌入式   路径   文档   动态

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!