是否可以使用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}}])
我使用了上面的代码来实现它。哪种方式更适合使用?这也可以,为了简单起见,我将其分解。至于最优方案,我想您的解决方案会更有效,因为您不需要两次转换和保存。遗憾的是,我们放弃了这种数据存储想法,转而采用另一种方法。是的,你的方法也奏效了。谢谢你的帮助