MongoDB $ lookup用对象数组替换

编程入门 行业动态 更新时间:2024-10-22 15:33:26
本文介绍了MongoDB $ lookup用对象数组替换_id数组,而无需将数组转换为对象并删除字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个这样的对象:

{ "_id": { "$oid": "5f0047f02fd3fc048aab9ee9" }, "array": [ { "_id": { "$oid": "5f00dcc23e12b8721e4f3672" }, "name": "NAME", "sub_array": [ { "sub_array2": [ { "$oid": "5f00e367f7b8747beddc6d31" }, { "$oid": "5f00f26c1facd18c5158d1d3" } ], "_id": { "$oid": "5f00de99a8802e767885e72b" }, "week_day": 1 }, { "sub_array2": [ { "$oid": "5f00e367f7b8747beddc6d31" } ], "_id": { "$oid": "5f00f2501facd18c5158d1d2" }, "week_day": 3 } ] }, { "_id": { "$oid": "5f00f2401facd18c5158d1d1" }, "name": "NAME1", "sub_array": [] } ] }

我想用另一个集合中的对象替换sub_array id,但这导致将 array 和 sub_array 转换为对象,并丢失所有数据,例如 week_day .查找:

I want to replace sub_array ids with objects from another collection but that results converting array and sub_array to objects and losing all of the data like week_day. Lookup:

'$lookup': { 'from': 'sati', 'localField': 'array.sub_array.sub_array2', 'foreignField': '_id', 'as': 'array.sub_array.sub_array2' }

结果:

{ "_id": { "$oid": "5f0047f02fd3fc048aab9ee9" }, "array": { "sub_array": { "sub_array2": [ { "_id": { "$oid": "5f00e367f7b8747beddc6d31" }, "endTime": "2020-07-03T12:06:50+0000", "startTime": "2020-07-03T12:05:50+0000", "data1": { "$oid": "5f005e63ab1cbf2374d5163f" } }, { "_id": { "$oid": "5f00e367f7b8747beddc6d31" }, "endTime": "2020-07-03T12:06:50+0000", "startTime": "2020-07-03T12:05:50+0000", "data1": { "$oid": "5f005e63ab1cbf2374d5163f" } }, { "_id": { "$oid": "5f00e367f7b8747beddc6d31" }, "endTime": "2020-07-03T12:06:50+0000", "startTime": "2020-07-03T12:05:50+0000", "data1": { "$oid": "5f005e63ab1cbf2374d5163f" } } ] } } }

有没有一种方法可以替换"单个ID,而无需将整个数组转换为对象并删除其他字段.我知道猫鼬可以做到这一点,但我不允许使用它.其他问题都没有帮助(示例).

Is there a way to "replace" the individual ids without converting entire arrays to objects and removing other fields. I know mongoose can do that but I'm not permitted to use it. None of the other questions helped (example).

推荐答案

它将使用 $ lookup 结果覆盖整个对象 key:value .而是将查找结果存储在 sati 变量中,并添加一个额外的阶段,如下所示.

It will override entire object key:value with $lookup result. Instead, store the lookup result in the sati variable and add an extra stage like shown below.

$ map 允许对数组进行迭代并转换每个项目.

$map allows use iterate over an array and transform each item.

db.collection.aggregate([ { "$lookup": { "from": "sati", "localField": "array.sub_array.sub_array2", "foreignField": "_id", "as": "sati" } }, { $project: { array: { $map: { input: "$array", as: "array", in: { _id: "$$array._id", name: "$$array.name", sub_array: { $map: { input: "$$array.sub_array", as: "sub_array", in: { _id: "$$sub_array._id", week_day: "$$sub_array.week_day", sub_array2: { $filter: { input: "$sati", as: "sati_item", cond: { $in: [ "$$sati_item._id", "$$sub_array.sub_array2" ] } } } } } } } } } } } ])

MongoPlayground |使用$ mergeObjects的替代方法

更多推荐

MongoDB $ lookup用对象数组替换

本文发布于:2023-11-22 19:30:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1618721.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数组   对象   MongoDB   lookup

发布评论

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

>www.elefans.com

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