mongoose中的populate之多级填充,嵌套字段填充?

在mongoose中存引用的时候如果是多级,查询的时候填充引用字段会使用populate,如下:

定义一个User,有字段friends每一项是自己collection的ObjectId。

// file: user-schema.js
let mongoose = require('mongoose')
let ObjectId = mongoose.Schema.Types.ObjectId

module.exports = new mongoose.Schema({
    name: String,
    friends: [{type: ObjectId, ref: 'User'}]
})
// file: user-model.js
let mongoose = require('mongoose')
let userSchema = require('./user-schema.js')

module.exports = mongoose.model('User', userSchema)

定义一个commentSchema有字段from是User的_id,还有嵌套字段reply每一项是一个document有字段from和to都是User的_id

// file: comment-schema.js
let mongoose = require('mongoose')
let ObjectId = mongoose.Schema.Types.ObjectId

module.exports = new mongoose.Schema({
    from: {type: ObjectId, ref: 'User'},
    content: String,
    reply: [
        {
            to: {type: ObjectId, ref: 'User'},
            from: {type: ObjectId, ref: 'User'},
            content: String
        }
    ]
})

下面开始查询。

// file: comment-model.js
let mongoose = require('mongoose')
let ObjectId = mongoose.Schema.Types.ObjectId

module.exports = mongoose.model('Comment', userSchema)
let Comment = require('./comment-model.js')

Comment.findOne({})
		.populate('from') // 填充from字段
		.populate('reply.to reply.from') // 填充reply字段下的to和from

注意:reply下的字段to和from的填充,并不是mongoose官文populate章节中的多级填充。

// file: comment-model.js
Coment.findOne({})
		.populate({path: 'from', populate: {path: 'friends'}})

填充from字段查询出来的结果中的friends字段才是多级填充。

多级指的是需要填充的字段是在查询出来的数据对应的Schema中定义的。而第一个查询的填充类型的定义都是在comment-schema.js中,无论是from字段还是reply下面的to和from。而第二个查询的字段from是在comment-schema.js中定义,但是查询出来的document User 中的friends字段则是在user-schema.js中定义的。

我的理解是:准确的说多级是需要填充的字段是填充过后出现的。而字段的嵌套不能说是多级,至少我是这么认为的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值