如何将数组元素投影为文档中的属性?
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
- 获取第一个成员并使其成为字段的值
aggregate(
[{"$set":
{"emp_name": {"$arrayElemAt": ["$emp_name", 0]},
"username": {"$arrayElemAt": ["$username", 0]}}}])
查询2
- 如果你有 MongoDB >=5 你也可以使用
$first
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"}
}
}
我正在尝试投影使用 $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
- 获取第一个成员并使其成为字段的值
aggregate(
[{"$set":
{"emp_name": {"$arrayElemAt": ["$emp_name", 0]},
"username": {"$arrayElemAt": ["$username", 0]}}}])
查询2
- 如果你有 MongoDB >=5 你也可以使用
$first
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"}
}
}