node.js - 如何在猫鼬中返回与一个特定键值相关的多个值?
问题描述
我创建了帐户和项目架构。项目架构也具有与我的帐户projectCreatorId
相同的值。_id
我想要的结果是,如果应用程序获取列表中的所有项目,我还想获取与projectCreatorId
可以在accountModel
.
projectController.js
export const getProjectList = async (req, res) => {
try {
projectModel
.aggregate([
{
$lookup: {
from: 'accountModel',
localField: 'projectCreatorId',
foreignField: '_id',
as: 'output',
},
},
])
.then((result) => console.log(result));
} catch (error) {
res.status(500).json({ msg: error.message });
}
};
结果:
[
{
_id: 6124f5d1b77aab39fc8db7ba,
lastOpened: { date: 2021-08-24T13:36:17.364Z },
projectCreatorId: 612630b5caec270758fcbc22,
projectName: 'Project One',
projectNotes: '',
startDate: 2021-08-24T13:31:20.050Z,
endDate: 2021-08-31T13:31:20.000Z,
whoCanEdit: 'Admin',
viewType: 'List',
lastUpdate: 2021-08-24T13:36:17.364Z,
createdAt: 2021-08-24T13:36:17.364Z,
__v: 0,
output: []
},
{
_id: 6124f71db77aab39fc8db7c5,
lastOpened: { date: 2021-08-24T13:41:49.957Z },
projectCreatorId: 610fa182093746447c9c399f,
projectName: 'Project Two',
projectNotes: '',
startDate: 2021-08-24T13:41:36.304Z,
endDate: 2021-08-30T13:41:36.000Z,
whoCanEdit: 'Everyone',
viewType: 'List',
lastUpdate: 2021-08-24T13:41:49.957Z,
createdAt: 2021-08-24T13:41:49.957Z,
__v: 0,
output: []
},
{
_id: 61252481b77aab39fc8db81c,
lastOpened: { date: 2021-08-24T16:55:29.378Z },
projectCreatorId: 610fa182093746447c9c399f,
projectName: 'Project Three',
projectNotes: '',
startDate: 2021-08-24T16:55:13.490Z,
endDate: 2021-08-31T16:55:13.000Z,
whoCanEdit: 'Everyone',
viewType: 'List',
lastUpdate: 2021-08-24T16:55:29.378Z,
createdAt: 2021-08-24T16:55:29.378Z,
__v: 0,
output: []
}
]
解决方案
您只需要$lookup
像这样进入聚合阶段:
$lookup
合并结果比较_id
和projectCreatorId
。它创建一个名为的数组result
- 然后得到结果数组的第一个位置。
- 并用于
$project
仅输出您想要的值。
db.account.aggregate([
{
"$lookup": {
"from": "project",
"localField": "_id",
"foreignField": "projectCreatorId",
"as": "result"
}
},
{
"$set": {
"result": {
"$arrayElemAt": [
"$result",
0
]
}
}
},
{
"$project": {
"_id":0,
"name": 1,
"projectName": "$result.projectName",
"projectCreatorId": "$result.projectCreatorId"
}
}
])
这里的例子
推荐阅读
- vue.js - 在“vue2-dropzone”中找不到导出“vue2Dropzone”
- jquery - 使 HTML5 视频的持续时间指示器向上计数而不是向下计数
- php - 如何从查询生成器 Laravel 中的不同表中选择一个值
- reactjs - 如何在 redux 操作上设置间隔而不重新渲染整个应用程序
- jquery - 在 Yajra/jQuery 数据表中搜索列别名
- angular - Angular-cli 我的样式文件从 css 更改为 scss
- multithreading - 来自两个不同线程的 OpenCV GUI
- javascript - JavaScript中的数字减去数组
- angular - 无法在 Angular 和 Firebase 的环境上下文中声明实现
- python - Numpy Image Array 用 1 替换特定颜色,用 0 替换其他颜色