如何在mongodb查询中将数组转换为对象?
我是mongodb新手,希望使用管道将数组转换为对象。比如说,如何在mongodb查询中将数组转换为对象?,mongodb,mongodb-query,Mongodb,Mongodb Query,我是mongodb新手,希望使用管道将数组转换为对象。比如说, { field1: [1,2,3,4,5], field2: [‘a’,’b’,’c’,’d’,’e’], } 我希望将上述文档转换为 { fields: [ { field1: 1, field2: ‘a’ }, ...... {
{
field1: [1,2,3,4,5],
field2: [‘a’,’b’,’c’,’d’,’e’],
}
我希望将上述文档转换为
{
fields: [
{
field1: 1,
field2: ‘a’
},
......
{
field1: 5,
field2: ‘e’
}
]
}
你知道我怎样才能做到这一点吗?你可以使用和来实现这一点:
db.collection.aggregate([
{
"$addFields": {
fields: {
$reduce: {
input: {
$zip: {
inputs: [
{
$map: {
input: "$field1",
as: "f1",
in: {
field1: "$$f1"
}
}
},
{
$map: {
input: "$field2",
as: "f2",
in: {
field2: "$$f2"
}
}
}
]
}
},
initialValue: [],
in: {
"$concatArrays": [
[
{
"$mergeObjects": "$$this"
}
],
"$$value"
]
}
}
}
}
}
])
确保field1
和field2
长度相等,否则会丢失一些数据。您可以使用和来实现此目的:
db.collection.aggregate([
{
"$addFields": {
fields: {
$reduce: {
input: {
$zip: {
inputs: [
{
$map: {
input: "$field1",
as: "f1",
in: {
field1: "$$f1"
}
}
},
{
$map: {
input: "$field2",
as: "f2",
in: {
field2: "$$f2"
}
}
}
]
}
},
initialValue: [],
in: {
"$concatArrays": [
[
{
"$mergeObjects": "$$this"
}
],
"$$value"
]
}
}
}
}
}
])
确保field1
和field2
长度相等,否则会丢失一些数据。您可以使用来分隔阵列
然后使用$project
设置新列表的格式,同时不要忘记删除由$unwind
创建的重复项
db.collection.aggregate({
"$unwind": {
path: "$field1",
includeArrayIndex: "field1_index"
}
},
{
"$unwind": {
"path": "$field2",
"includeArrayIndex": "field2_index"
}
},
{
"$project": {
"fields": {
"field1": "$field1",
"field2": "$field2"
},
"diff": {
$cmp: [
"$field1_index",
"$field2_index"
]
}
}
},
{
"$match": {
"diff": 0
}
},
{
$group: {
_id: "$_id",
fields: {
$push: "$fields"
}
}
})
试试它您可以使用它来分隔阵列
然后使用$project
设置新列表的格式,同时不要忘记删除由$unwind
创建的重复项
db.collection.aggregate({
"$unwind": {
path: "$field1",
includeArrayIndex: "field1_index"
}
},
{
"$unwind": {
"path": "$field2",
"includeArrayIndex": "field2_index"
}
},
{
"$project": {
"fields": {
"field1": "$field1",
"field2": "$field2"
},
"diff": {
$cmp: [
"$field1_index",
"$field2_index"
]
}
}
},
{
"$match": {
"diff": 0
}
},
{
$group: {
_id: "$_id",
fields: {
$push: "$fields"
}
}
})
试试看