Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在mongoDB API Node Express中获取3个集合中的所有文档_Node.js_Mongodb_Mongoose_Foreign Keys - Fatal编程技术网

Node.js 在mongoDB API Node Express中获取3个集合中的所有文档

Node.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:

我在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
这是我的URL
http://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`表中有多条记录用于此程序id
f5bc589cd52cd2d2
)@Anthony Winzlet:为什么如此沉默?在
$project
中,返回特定字段的
1
是什么意思。参考链接:@Anthony Winzlet,谢谢,