Mongoose 中的关系

问题描述 投票:0回答:1

我试图从关系中获取价值,就像 bookSchema. Producer= ProducerSchema.id 一样,所以,我将从 ProducerSchema.nameProducer 获取值是字符串。我可以从两者中获得价值,但不知道如何建立关系。如果我使用 mysql 或 MS SQL,可能会更容易,但我是 MongoDB 的新手。

这是我的代码。

const bookSchema= new db.Schema({
    id:Number,
    nameBook:String,
    prices:Number,
    region:Boolean,
    producer: {
        type: db.Schema.Types.ObjectId,
        ref: 'producerS',
    },
    moTA:String,
    urlImages:String
},{versionKey:false});


const ProducerSchema = new db.bookSchema({
    id: Number,
    nameProducer: String   
},{versionKey:false});



const producerS= db.model('produceRs', ProducerSchema );


const bookS =db.model('booKs',bookSchema);


const listBook=async()=>{
    try{
        const list = await bookS.find({}).populate('producer');;
        return list;
    }catch(error){
        throw error;
    }
}

和产值

<% sachs.forEach(s => { %>
                <tr>
                    <th><%= s.id %></th> //worked
                    <td><%= s.nameBook%></td> //worked
                    <td><%= s.prices%></td> //work
                    <td><%= s.producer%></td> //not worked <!-- im also use s.producer.nameProducer but its ping not define -->
                    <td><%= s.region== 1 ? "A" : "B" %></td>
                </tr>
                <% }) %>

抱歉我的英语不好。

我尝试了一些解决方案,但似乎根本不起作用。

node.js mongodb mongoose
1个回答
0
投票

我假设您在从图书架构中查询图书时想要获取生产者的名称。如果是这种情况,您可以在字段中添加

ref
值。
ref value
应该是从模型导出的名称。

const Producer= db.model('Producer', ProducerSchema );
module.exports = Producer

请检查导出名称

const bookSchema= new db.Schema({
    id:Number,
    nameBook:String,
    prices:Number,
    region:Boolean,
    producer: {
        type: db.Schema.Types.ObjectId,
        ref: 'Producer',
    },
    moTA:String,
    urlImages:String
},{versionKey:false});

现在要获取生产者的名称,您可以使用填充查询。

在某些情况下,您需要在顶部导入模型才能填充才能工作,具体取决于所使用的 mongoose/mongo 版本。

© www.soinside.com 2019 - 2024. All rights reserved.