在mongoose / MongoDB

时间:2018-06-27 16:33:02

标签: node.js database mongodb mongoose

假设我们有三个集合,

  1. publications

  2. authors

  3. books

现在,这些是关系:

  1. publications有很多authors

  2. authors有很多books

  3. books有一个author

现在,当我们将mongoose库用于node.js时,我们可以使用schema definition中的ref键来定义关系。例如:

对于publications

const mongoose = require('mongoose')
const Schema   = mongoose.Schema

var publicationSchema = new Schema({
    name: String,
    authors: [{
        type: Schema.Types.Objectid,
        ref: 'Author'
    }]
})

var Publication = mongoose.model('Publication', publicationSchema)

对于authors

var authorSchema = new Schema({
    name: String,
    books: [{
        type: Schema.Types.Objectid,
        ref: 'Book'
    }]
})

var Author = mongoose.model('Author', authorSchema)

对于books

var bookSchema = new Schema({
    title: String,
    category: String,
    author: {
        type: Schema.Types.ObjectId,
        ref: 'Author'
    }
})

var Book = mongoose.model('Book', bookSchema)

现在,假设我们有一本带有特定_id book 。我们可以使用猫鼬的.populate()方法获取的详细信息及其 author 。例如

Book.findOne({_id: '5d36fxxxxxxxxxxx0a'})
    .populate('author')
    .exec( (err, book) => {
         console.log('The author of '+book.title+' is '+book.author.name)
     } )

到现在为止,我没有问题。我只是提供上下文。

现在我的问题是:

我知道在幕后,当我们调用.populate()时,猫鼬对服务器进行了另一个查询。因此,要获取完整的数据,我们要进行两个查询。对于具有数千个并发用户的大型应用程序来说,这可能是个问题。

猫鼬有什么办法,所以只进行一次查询,而不是两次?

MongoDB服务器应该自己解决它,而只发送最终结果,而不是客户端必须通过其他查询来解决ref

注意:无法更改数据库体系结构。

0 个答案:

没有答案