如何将数组元素投影为文档中的属性?

How to project an array element as a attribute in a document?

我正在尝试投影使用 $lookup 连接两个文档后得到的数组的两个元素。当我使用点符号访问数组元素时,如下所示 -

db.departments.aggregate([{
    $lookup: {
        from: 'employees',
        localField: 'dep_id',
        foreignField: 'department',
        as: 'emps'
    }
}, {
    $project: {
        _id: 0,
        emp_id: 1,
        salary: 1,
        emp_name: '$emps.name',
        username: '$emps.username'
    }
}])

我得到以下结果 -

emp_id:910579
salary:100000
emp_name:Array
    0:"Stephen Wolf"
username:Array
    0:"StepWolf"

我要的结果如下-

emp_id:910579
salary:100000
emp_name:"Stephen Wolf"
username:"StepWolf"

有人有什么建议吗?我想要一些可以将数组元素转换为属性的东西,类似于 ObjectToArray 函数。

查询 1

  • 波纹管 field : [m1 m2 m2] => field : m1
  • 获取第一个成员并使其成为字段的值

Test code here

aggregate(
[{"$set": 
   {"emp_name": {"$arrayElemAt": ["$emp_name", 0]},
    "username": {"$arrayElemAt": ["$username", 0]}}}])

查询2

  • 如果你有 MongoDB >=5 你也可以使用 $first

Test code here

aggregate(
[{"$set": 
   {"emp_name": {"$first": "$emp_name"},
    "username": {"$first": "$username"}}}])

在您的情况下,在您已有的项目中使用 query1 或 query2,例如:

{
    $project: {
        _id: 0,
        emp_id: 1,
        salary: 1,
        "emp_name": {"$first": "$emp_name"},
        "username": {"$first": "$username"}
    }
}