将对象转换为 key/value 数组 mongodb
Transform objects into key/value array mongodb
我有这个数据:
[
{
"_id": "0001",
"n1": "0001",
"n2": 1234
},
{
"_id": "0002",
"n1": "0002",
"n2": 9876
}
]
使用聚合框架将它转换成这个的最佳方法是什么?:
[
{
"_id": "0001",
"lookupFields": [
{
"n": "n1",
"v": "0001"
},
{
"n": "n2",
"v": 1234
}
]
},
{
"_id": "0002",
"lookupFields": [
{
"n": "n1",
"v": "0002"
},
{
"n": "n2",
"v": 9876
}
]
}
]
感谢您宝贵的帮助
db.collection.aggregate([
{
$project: {
n: {
n1: "$n1",
n2: "$n2"
}
}
},
{
$project: {
lookupFields: {
$objectToArray: "$n"
}
}
},
{
$addFields: {
lookupFields: {
$map: {
input: "$lookupFields",
as: "lf",
in: {
n: "$$lf.k",
v: "$$lf.v"
}
}
}
}
}
])
解释:
- 投影对象 n 内的 n1&n2 字段
- 将对象 n 投影为新字段 lookupFileds 作为数组。
- 映射以根据要求将数组对象键 k,v 重命名为 n,v
我有这个数据:
[
{
"_id": "0001",
"n1": "0001",
"n2": 1234
},
{
"_id": "0002",
"n1": "0002",
"n2": 9876
}
]
使用聚合框架将它转换成这个的最佳方法是什么?:
[
{
"_id": "0001",
"lookupFields": [
{
"n": "n1",
"v": "0001"
},
{
"n": "n2",
"v": 1234
}
]
},
{
"_id": "0002",
"lookupFields": [
{
"n": "n1",
"v": "0002"
},
{
"n": "n2",
"v": 9876
}
]
}
]
感谢您宝贵的帮助
db.collection.aggregate([
{
$project: {
n: {
n1: "$n1",
n2: "$n2"
}
}
},
{
$project: {
lookupFields: {
$objectToArray: "$n"
}
}
},
{
$addFields: {
lookupFields: {
$map: {
input: "$lookupFields",
as: "lf",
in: {
n: "$$lf.k",
v: "$$lf.v"
}
}
}
}
}
])
解释:
- 投影对象 n 内的 n1&n2 字段
- 将对象 n 投影为新字段 lookupFileds 作为数组。
- 映射以根据要求将数组对象键 k,v 重命名为 n,v