mongodb - 如何使用 Mongo 聚合方法将一个集合字段名称加入另一个集合字段值?
问题描述
我在 Spring Boot 2 和 Spring Data MongoDB 上。
在前端,在用户表单中,所有字段都从数据库中动态显示。
我有所有字段的“归档”集合。
所以我的 Field 集合看起来像:
{
"_id" : ObjectId("5f05a51dc9e77c00014bb3b5"),
"fieldName" : "name",
"fieldType" : "text"
},
{
"_id" : ObjectId("5f05a51dc9e77c00014b4523"),
"fieldName" : "address",
"fieldType" : "text"
}
用户收藏
{
"_id" : ObjectId("5f058db405c9fc60965ce243"),
"name" : "john",
"address" : "US"
}
现在我想根据 Field 集合和用户集合的 fileName 字段加入这两个集合。
我期望结果:
{
"_id" : ObjectId("5f058db405c9fc60965ce243"),
"fileds":[
{
"_id" : ObjectId("5f05a51dc9e77c00014bb3b5"),
"fieldName" : "name",
"fieldType" : "text",
"value":"John"
},
{
"_id" : ObjectId("5f05a51dc9e77c00014b4523"),
"fieldName" : "address",
"fieldType" : "text",
"value":"US"
}]
}
任何的想法?
解决方案
这是一个快速示例,如何使用$objectToArray然后$lookup
对字段名称执行此操作。
db.users.aggregate([
{
$addFields: {
userFields: {
$objectToArray: "$$ROOT"
}
}
},
{
$unwind: "$userFields"
},
{
$lookup: {
from: "fields",
let: {
field: "$userFields.k"
},
pipeline: [
{
$match: {
$expr: {
$eq: [
"$$field",
"$fieldName"
]
}
}
},
{
$addFields: {
value: "$$field"
}
}
],
as: "fields"
}
},
{
$unwind: "$fields"
},
{
$group: {
_id: "$_id",
fields: {
$push: "$fields"
}
}
}
])
推荐阅读
- javascript - 如何在 Web 组件 java 脚本中将数字转换为其各自的字母
- javascript - 崇高文本中jsx的语法高亮错误
- java - Java Apache FTPClient 大多数下载的文件为空或丢失
- vhdl - VHDL:这两个是等价的吗?
- php - 如何从 curl 响应中读取文件数据?
- python - 如何在 Pycharm 内存错误中增加 Python 程序可用的内存
- python - 如何在 python 中包含带有 bdist_wheel 的外部 shell 脚本?
- php - 带有占位符的 Symfony 翻译不起作用
- c# - 如何使用结构上的 ref 修改值。C#
- python - Old PyMC3 style grouping traceplot plotted with Arviz