如何引用另一个文件夹中的模型?

时间:2018-05-08 04:42:57

标签: node.js mongoose mongoose-schema

例如,nexts模式位于不同的文件夹中,如下所示:

cr/user
lms/content

这是schemaContent

user: {
        type: Schema.Types.ObjectId,
        ref: 'cr/user'
    }

如何从内容中引用用户?

因为当我使用cr / user时出现错误" Schema尚未注册模型"

我只需要在Content.find().populate({ path: 'users' })之类的内容中填充用户,将用户保存在名为cr的文件夹中,将内容保存在名为lms的文件夹中

1 个答案:

答案 0 :(得分:0)

您正在尝试嵌套文档。尝试以下方法来嵌套文档。

我将假设目录crlms位于名为demoproject的目录中

<强> demoproject / CR / user.js的

const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const UserSchema = new Schema({
    name:{
        type : String,
        required: true
    }
});
const User = mongoose.model("User",UserSchema);
module.exports = User;

<强> demoproject / LMS / content.js

./../cr/user - 从lms目录返回并进入cr/user

const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const User = require("./../cr/user");
const ContentSchema = new Schema({
    type:{
        type : String,
        required: true
    },
    users : [{
        type  : Schema.Types.ObjectId,
        ref : "User"
    }]
});
const Content = mongoose.model("Content",ContentSchema);
module.exports = Content;
  

如何从内容中引用用户?

我希望你的问题现在清楚了。请继续阅读

关键时刻

允许使用这两个模型插入数据。

创建一个文件来编写mongo查询(demoproject/index.js)。

  • 由于User model嵌套在Content model中,我们需要先将数据保存到User model
  • 然后将数据保存到Content model
  • 现在将数据推送到内容模型users
  • 中的contentdata.users.push(userdata);对象
  • 将userdata对象推送到contentdata contentdata
  • 后,忘记保存contentdata.save();

<强> demoproject / index.js

const User = require("./cr/user");
const Content = require("./lms/content");

const userobj = new User({name : "rockyjohnson"});
const contentobj = new Content({type : "gloves"});

userobj.save().then((userdata)=>{
    contentobj.save().then((contentdata)=>{
        contentdata.users.push(userdata);
        contentdata.save();
    }).catch((err)=>{
        console.log("err while saving contentdata ", err);
    })
}).catch((err)=>{
    console.log("err while saving userdata ", err);
}) 

Mongodb输出 enter image description here

这就是全部

更新回答第二个问题

find在其承诺中返回array个对象。我可以在此处提取users内的Content model个对象。以下是我用来验证的查询

Content.find().then((data)=>{
    data.forEach(element => {
        console.log("element users ",element.users); // element.users contains all id's stored in the users array
    });
}).catch((err)=>{
    console.log("err  ",err);
})