猫鼬深受自我介绍的孩子们的影响

时间:2015-03-11 21:28:56

标签: angularjs node.js mongoose

这是填充我的Locations集合的工作代码,该集合可以具有自引用子位置。它使用mongoose-deep-populate。但我需要添加另一个" .childLocations"到我想要处理的每个额外深度级别的路径变量。有没有更好的方法来完成未知深度的自我引用?

我有这个node.js代码。

var path = 'childLocations.childLocations.childLocations.childLocations.childLocations.childLocations';
exports.list = function(req, res) {
  Location.find().sort('-created').populate('user', 'displayName').deepPopulate(path).exec(function(err, locations) {
    console.log(locations);
    if (err) {
      return res.status(400).send({
        message: errorHandler.getErrorMessage(err)
      });
    } else {
      res.jsonp(locations);
    }
  });
};

这是架构:

var LocationSchema = new Schema({
    name: {
        type: String,
        default: '',
        required: 'Please fill Location name',
        trim: true
    },
    projectsExecutedHere: Boolean,
    childLocations: [{
        type: Schema.ObjectId,
        ref: 'Location'
    }],
    created: {
        type: Date,
        default: Date.now
    },
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    }
});

mongoose.model('Location', LocationSchema);

var deepPopulate = require('mongoose-deep-populate');
LocationSchema.plugin(deepPopulate);

----------

在尝试mongoose-deep-populate之前,我曾看到猫鼬3.6支持深度人口,但我只能让它达到一个深度。这就是我试过的:

Location.find().sort('-created').populate('user', 'displayName').populate('childLocations').exec(function (err, locations) {
        Location.populate(locations, {path: 'childLocations.childLocations'},
            function (err, data) {
                console.log(err);
                if (err) {
                    return res.status(400).send({
                        message: errorHandler.getErrorMessage(err)
                    });
                } else {
                    res.jsonp(locations);
                }
            }
        );

对于路径,我也试过了“childLocations.childLocations.childLocations'但它根本没有填充它。

0 个答案:

没有答案