简体   繁体   English

如何在猫鼬中执行内连接

[英]How to perform inner join in mongoose

I was googling for last two days but no success.我在谷歌上搜索了两天,但没有成功。 I need to perform inner join in mongoose with two schema but not getting response my other collection.我需要使用两个模式在 mongoose 中执行内部连接,但没有得到我的其他集合的响应。 My question is what am I missing in my code?我的问题是我的代码中缺少什么? Please help me with this.请帮我解决一下这个。

I want to get result of class and subjects also.我也想得到课堂和科目的结果。

  exports.classSubjectList = async (req, res, next) => {
  const obj = await ClassSubject.find().populate('classmodel').exec();
  res.status(200).json({
        success: true,
        response: obj
      });
};

//ClassSubjectModel //ClassSubjectModel

const mongoose = require('mongoose');
mongoose.Promise = global.Promise 
const Schema = mongoose.Schema
const classModel  = require('../class/classModel');
const subjectModel  = require('../subject/subjectModel');

var classsubject = new Schema({    
    ClassId: String,
    SubjectId : String,
    IsShow: { type: Boolean, default : true},   
    classmodel: { type: mongoose.Schema.Types.ObjectId, ref: classModel },
    subjectmodel: { type: mongoose.Schema.Types.ObjectId, ref: subjectModel },

});

//Class Model //类模型

const mongoose = require('mongoose');
mongoose.Promise = global.Promise 
const Schema = mongoose.Schema

var classinfo = new Schema({    
    ClassName: String,
    IsShow: { type: Boolean, default : true},   

});


module.exports = mongoose.model('classinfo', classinfo);

//SUBJECT Model //主题模型

const mongoose = require('mongoose');
mongoose.Promise = global.Promise 
const Schema = mongoose.Schema

var subject = new Schema({    
    SubjectName: String,
    IsShow: Boolean,   

});


module.exports = mongoose.model('subject', subject);

result结果

[
        {
            "IsShow": true,
            "_id": "5e1efc0f354849246c472cfe",
            "SubjectId": "5e1da60bf52acb30b87e92c4",
            "ClassId": "5e1ec13ed777bf28d01e2481",          
            "__v": 0
        }]

You should define ref as the name of your schema & not the object reference您应该将 ref 定义为架构的名称而不是对象引用

Do it like this像这样做

classmodel: { type: mongoose.Schema.Types.ObjectId, ref: 'classinfo' } 
subjectmodel: { type: mongoose.Schema.Types.ObjectId, ref: 'subject' },
// here 'classinfo' & 'subject' are the names you defined your schema with 

You should populate both if you want a proper inner join如果你想要一个适当的内部连接,你应该填充两者

const obj = await ClassSubject.find().populate('classmodel').populate('subject').exec();

You must store ids of class & reference in classmodel & subjectmodel key of your document for this to work您必须在文档的 classmodel 和 subjectmodel 键中存储类和引用的 id 才能使其工作

Hope this helps希望这可以帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM