我有如下命名为"FormData"的集合,
{
"_id": ObjectId("5e3c27bf1ef77236945ef07b"),
"eed12747-0923-4290-b09c-5a05107f5609": "20200206",
"bd637691-782d-4cfd-8624-feeedfe11b3e": "20200206_1@mail.com"
}
我有另一个名为"Form"的集合,其中包含字段标题,
{
"_id": ObjectId("5e3c27bf1ef77236945ef07b"),
"Fields":[
{
"FieldID": "eed12747-0923-4290-b09c-5a05107f5609",
"Title": "Phone"
},
{
"FieldID": "bd637691-782d-4cfd-8624-feeedfe11b3e",
"Title": "Email"
}]
}
现在我必须Map元素名称与表单字段标题,我需要如下结果,
{
"_id": ObjectId("5e3c27bf1ef77236945ef07b"),
"Phone": "20200206",
"Email": "20200206_1@mail.com"
}
请帮我解决这个问题。
先谢了!
2条答案
按热度按时间d8tt03nd1#
您可以:
$objectToArray
,将$$ROOT
文档转换为k-v对数组,以供将来查找1.使用
$lookup
中的子管道通过uuid查找值1.使用
$mergeObject
将原始值(即"20200206 ...")与查找到的新字段名称(即"Phone ...")组合在一起1.使用
$arrayToObject
和$replaceRoot
将结果转换回原始形式Mongo Playground
55ooxyrt2#
另一种选择是从
Form
集合开始并避开$unwind
:$match
和$lookup
,将所有需要的数据放入一个文档$objectToArray
以获取FormData
的已知密钥1.使用
$indexOfArray
和$arrayElemAt
匹配项,并使用$mergeObjects
合并它们。然后使用arrayToObject
化响应了解它在playground example上的工作原理