Node.js 在mongoDB API Node Express中获取3个集合中的所有文档
我在mongoDB有3个系列。例如作者、事件、议程。模式如下所示。我正在使用Node Express创建APINode.js 在mongoDB API Node Express中获取3个集合中的所有文档,node.js,mongodb,mongoose,foreign-keys,Node.js,Mongodb,Mongoose,Foreign Keys,我在mongoDB有3个系列。例如作者、事件、议程。模式如下所示。我正在使用Node Express创建API Authors ------- _id PK name avatar Events ------ _id PK name start_time end_time user_id FK Agendas ------- _id PK name end_time event_id FK 这是我的URLhttp://localhost:
Authors
-------
_id PK
name
avatar
Events
------
_id PK
name
start_time
end_time
user_id FK
Agendas
-------
_id PK
name
end_time
event_id FK
这是我的URLhttp://localhost:3000/events/
当我使用GET请求访问此URL时,我想列出事件
详细信息(文档)、相关的作者
详细信息(文档)(即用户id)和议程
详细信息(文档)。在这里,我面临着各种麻烦。这里的议程有事件id
键。我可以通过以下代码片段列出事件和用户详细信息
事件控制器.js
const express=require("express");
const router =express.Router();
const mongoose=require("mongoose");
const multer = require('multer');
var assert = require('assert');
// Retrieve and return all programe from the database.
exports.findAll = (req, res) => {
Event.find()
.populate('user_id')
.then(programs => {
res.send(programs);
}).catch(err => {
res.status(500).send({
message: err.message || "Some error occurred while retrieving programe."
});
});
};
实际上,我在这里看不到您的问题,但是如果您想查找这些集合中的所有文档,请尝试使用请检查下面使用
聚合的查询它对您有帮助
db.getCollection('events').aggregate([
{
$lookup: {
from: "Authors",
localField: "userId",
foreignField: "_id",
as: "Authors"
}
},
{
$lookup: {
from: "Agendas",
localField: "_id",
foreignField: "event_id",
as: "Agendas"
}
},
{
$project: {
_id: 1,
name: 1,
start_time:1,
end_time : 1,
Authors :1,
Agendas:1
}
}])
你可以在下面试试
Event.aggregate([
{ "$lookup": {
"from": Users.collection.name,
"let": { "user_id": "$user_id" },
"pipeline": [
{ "$match": { "$expr": { "$eq": [ "$_id", "$$user_id" ] } } },
],
"as": "user_id"
}},
{ "$unwind": "$user_id" },
{ "$lookup": {
"from": Agenda.collection.name,
"let": { "evenId": "$_id" },
"pipeline": [
{ "$match": { "$expr": { "$eq": [ "$event_id", "$$evenId" ] } } },
],
"as": "agenda"
}}
])
请在这里解释我面临的困难。这里的议程有事件id键。我可以通过以下代码片段列出事件和用户详细信息。是的!,这是'GET'请求URL
http://localhost:300/programs/id=f5bc589cd52cd2d2
。现在我只得到Program
表记录和User
表记录。如何使用id f5bc589cd52cd2d2
获取议程
表格详细信息。(此处,~Agenda`表中有多条记录用于此程序idf5bc589cd52cd2d2
)@Anthony Winzlet:为什么如此沉默?在$project
中,返回特定字段的1
是什么意思。参考链接:@Anthony Winzlet,谢谢,