![](/img/trans.png)
[英]How to lookup or aggregate a field of an object in an array of javascript objects (in mongodb)?
[英]mongodb: how to extract field instead of getting an object with aggregate + $lookup + $project
我有两个合同。
// UserInfo
{ _id: '1', name: 'Alice' }
{ _id: '2', name: 'Bob' }
{ _id: '3', name: 'Charlie' }
// Application
{ _id: '00', userId: '1', jobId: 'gg' }
{ _id: '01', userId: '1', jobId: 'fb' }
{ _id: '02', userId: '2', jobId: 'ms' }
我想得到:
{ name: 'Alice', jobIds: [ 'gg', 'fb' ] }
{ name: 'Bob', jobIds: [ 'ms' ] }
{ name: 'Charlie', jobIds: [] }
请注意,查理没有应用程序。
我当前的代码:
UserInfo.aggregate([
{
$lookup: {
from: 'applications',
let: { userId: '$_id' },
pipeline: [
{
$match: {
$expr: { $eq: ['$userId', '$$userId'] }
}
},
{
$project: { jobId: 1, _id: 0 }
}
],
as: 'jobIds'
}
}
])
我有:
{ _id: '1', name: 'Alice', jobIds: [ { jobId: 'gg' }, { jobId: 'fb' } ] }
{ _id: '2', name: 'Bob', jobIds: [ { jobId: 'ms' } ] }
{ _id: '3', name: 'Charlie', jobIds: [] }
如何获取jobIds: [ 'gg', 'fb' ]
而不是jobIds: [ { jobId: 'gg' }, { jobId: 'fb' } ]
?
在聚合流水线阶段还没有找到合适的方法。
在管道的末尾使用$addFields
阶段。
UserInfo.aggregate([
{ "$lookup": {
"from": "applications",
"let": { "userId": '$_id' },
"pipeline": [
{ "$match": { "$expr": { "$eq": ["$userId", "$$userId"] }}},
{ "$project": { "jobId": 1, "_id": 0 }}
],
"as": "jobIds"
}},
{ "$addFields": { "jobIds": "$jobIds.jobId" }}
])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.