是否可以使用arrayToObject将objectsID数组转换为mongoDB中的object?
我有这样的数组:是否可以使用arrayToObject将objectsID数组转换为mongoDB中的object?,mongodb,mongodb-query,aggregate,Mongodb,Mongodb Query,Aggregate,我有这样的数组: "organizationIds" : [ ObjectId("60373852f64bf2cc8c73136d"), ObjectId("60373852f64bf2cc8c73139d"), ObjectId("60373852f64bf2cc8c73138d") ] 我想谈谈这个问题: "organization":{
"organizationIds" : [
ObjectId("60373852f64bf2cc8c73136d"),
ObjectId("60373852f64bf2cc8c73139d"),
ObjectId("60373852f64bf2cc8c73138d")
]
我想谈谈这个问题:
"organization":{
"ObjectId("60373852f64bf2cc8c73136d")":{
owner: false
},
"ObjectId("60373852f64bf2cc8c73138d")":{
owner: false
}
"ObjectId("60373852f64bf2cc8c73138d")":{
owner: true
}
}
我试过使用:
db.getCollection('users').aggregate([{$addFields:{organizationsPermissions:{$arrayToObject:"$organizationIds"}}},])
但是我不断得到$arrayToObject:objectId“的error”无法识别的输入类型格式
有没有办法达到我想要的结果?下面是使用聚合框架的解决方案
$arrayToObject
使用以下格式在数组上工作:
[[“项目”,“abc123”],[“数量”,25]]
因此,首先使用下面的管道将您的OrganizationID
数组转换为该格式,该管道使用的$map
与Javascript中的数组映射函数完全相同。此外,ObjectId
不能用作对象键,因此也将其转换为字符串
{
"$addFields": {
"organizationIds": {
$map: {
input: "$organizationIds",
as: "org",
in: {
$concatArrays: [
[
{
$toString: "$$org"
}
],
[
{
owner: false
}
]
]
},
}
}
}
}
现在您可以使用$arrayToObject
{
"$addFields": {
"organizationIds": {
"$arrayToObject": "$organizationIds"
}
}
}
这里的工作示例 db.getCollection('users').aggregate([{$addFields:{organizationsPermissions:{$arrayToObject:{$map:{“input”:“$organizationIds”,“as”:“out”,“in”:{“k”:{$toString:$$out”},v:{“owner”:false}}])
我使用了上面的代码来实现它。哪种方式更适合使用?这也可以,为了简单起见,我将其分解。至于最优方案,我想您的解决方案会更有效,因为您不需要两次转换和保存。遗憾的是,我们放弃了这种数据存储想法,转而采用另一种方法。是的,你的方法也奏效了。谢谢你的帮助