为相同ID连接来自不同集合的MongoDB数组
我在同一个db下有两个集合-col1和col2。这些集合包含具有两个字段的文档-_id和arr。我正在尝试为相同的_id查找匹配项,每当找到匹配项时,我都希望将两个arr数组连接起来 在col1中,我有以下文档为相同ID连接来自不同集合的MongoDB数组,mongodb,concatenation,pymongo,Mongodb,Concatenation,Pymongo,我在同一个db下有两个集合-col1和col2。这些集合包含具有两个字段的文档-_id和arr。我正在尝试为相同的_id查找匹配项,每当找到匹配项时,我都希望将两个arr数组连接起来 在col1中,我有以下文档 {'_id': 'shalom', 'arr': [1, 2, 3]} {'_id': 'shalom', 'arr': [4, 5, 6]} 在col2中,我有以下文档 {'_id': 'shalom', 'arr': [1, 2, 3]} {'_id': 'shalom', '
{'_id': 'shalom', 'arr': [1, 2, 3]}
{'_id': 'shalom', 'arr': [4, 5, 6]}
在col2中,我有以下文档
{'_id': 'shalom', 'arr': [1, 2, 3]}
{'_id': 'shalom', 'arr': [4, 5, 6]}
我想在col1中创建一个新文档,如下所示
{'_id': 'shalom', 'arr': [1, 2, 3, 4, 5, 6]}
到目前为止我所做的(不起作用)是
运行此命令时,我得到以下异常
pymongo.errors.OperationFailure: $add only supports numeric or date types, not array, full error: {'ok'...
所以它看起来就快到了,只需要能够支持数组串联。您可以通过以下方式使用
$concatarray
或$setUnion
:
首先$lookup
获取另一个集合数组,并创建一个名为newArray
的新“辅助”数组
这里,$lookup
返回一个数组,因此需要使用$arrayElementAt
获取第一个(也是唯一的)位置
然后使用$concatarray
或$setUnion
对字段进行concat并删除“辅助”数组
db.coll1.aggregate([
{
“$lookup”:{
“from”:“coll2”,
“localField”:“\u id”,
“外域”:“\u id”,
“as”:“newArray”
}
},
{
“$set”:{
“新数组”:{
“$arrayElemAt”:[
“$newArray”,
0
]
}
}
},
{
“$set”:{
“arr”:{
“$setUnion”:[
“$arr”,
“$newArray.arr”
]
}
}
},
{
“$project”:{
“newArray”:0
}
}
])
示例您可以通过以下方式使用
$concatarray
或$setUnion
:
首先$lookup
获取另一个集合数组,并创建一个名为newArray
的新“辅助”数组
这里,$lookup
返回一个数组,因此需要使用$arrayElementAt
获取第一个(也是唯一的)位置
然后使用$concatarray
或$setUnion
对字段进行concat并删除“辅助”数组
db.coll1.aggregate([
{
“$lookup”:{
“from”:“coll2”,
“localField”:“\u id”,
“外域”:“\u id”,
“as”:“newArray”
}
},
{
“$set”:{
“新数组”:{
“$arrayElemAt”:[
“$newArray”,
0
]
}
}
},
{
“$set”:{
“arr”:{
“$setUnion”:[
“$arr”,
“$newArray.arr”
]
}
}
},
{
“$project”:{
“newArray”:0
}
}
])
示例我已经检查过了,工作正常。加入阵列时,需要使用
$concatarray
。操作$add
用于将其相加的数字,例如(1+1=2)
我已经检查过了,工作正常。加入阵列时,需要使用
$concatarray
。操作$add
用于将其相加的数字,例如(1+1=2)