【问题标题】:mongoose nested populate for self referencing model after 3/4 levelmongoose 嵌套填充 3/4 级后的自引用模型
【发布时间】:2017-10-29 09:36:21
【问题描述】:

总是发现 mongoose 在第 3 级之后没有填充。 用 mongoose@^4.12.4 尝试过这个

var mongoose = require('mongoose');
var config = require('./config')
var Promise = require('bluebird')
mongoose.Promise = Promise
mongoose.connect(config.dbURL, config.mongo.options)
var NodeSchema = new mongoose.Schema({
  friend: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Node'
  },
  name: String
});
var autoPopulateChildren = function(next) {
  this.populate('friend');
  next();
};
NodeSchema
  .pre('findOne', autoPopulateChildren)
  .pre('find', autoPopulateChildren)
var Node = mongoose.model('Node', NodeSchema)
var user1 = new Node({
  name: 'A'
})
var user2 = new Node({
  name: 'B'
})
var user3 = new Node({
  name: 'C'
})
var user4 = new Node({
  name: 'D'
})
var user5 = new Node({
  name: 'E'
})
user1.friend = user2._id
user2.friend = user3._id
user3.friend = user4._id
user4.friend = user5._id

Node.remove({})
  .then(Promise.all([user5, user4, user3, user2, user1].map(p => p.save())))
  .then(_ => Node.findOne({
    name: 'A'
  }))
  .then(r => console.log(r))

得到了关注.. A-->B-->C-->对象

但预计以下.. A-->B-->C-->D-->E

请帮忙!.. 提前谢谢..

【问题讨论】:

    标签: mongoose mongoose-populate


    【解决方案1】:

    你能试试这个吗?希望它会工作

    user1.friend = user2
    user2.friend = user3
    user3.friend = user4
    user4.friend = user5
    
    Node.remove({})
      .then(Promise.all([user5.save(), user4.save(), user3.save(), user2.save(), user1.save()]))
      .then(() => Node.findOne({
          name: 'A'
       }))
      .then(r => console.log(r))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      • 2017-06-17
      • 2017-03-01
      相关资源
      最近更新 更多