我猜是因为你通过向数据库发出1个请求而不是2来节省资源。这有意义吗?如果我只填充1个字段,我是否应该使用populate(当你填充超过1时,优势更清楚)?
答案 0 :(得分:1)
您不能使用populate来节省资源。在引擎盖下,mongoose根据需要多次调用数据库。考虑一下这个例子:
module.exports = function(){
var UserSchema = new Schema({
email : {type : String, required: true},
password: {type: String, required: true}
});
return mongoose.model("User", UserSchema);
};
module.exports = function(){
var AccountSchema = new Schema({
number : {type : String, required: true},
user: {type: Schema.Types.ObjectId, ref: 'User'}
});
return mongoose.model("Account", AccountSchema);
};
mongoose.set('debug', true); //to see queries mongoose is using behind the scenes
Account.find({}, function(err, res){
console.log(res)
}).populate("user")
除了结果之外,您还会在控制台上看到类似的内容:
Mongoose: accounts.find({}, { fields: undefined })
Mongoose: users.find({ _id: { '$in': [ ObjectId("5807d6d6aa66d7633a5d7025"), ObjectId("5807d6d6aa66d7633a5d7026"), ObjectId("5807d709aa66d7633a5d7027") ] } }, { fields: undefined })
那个猫鼬找到了帐户文件,然后是每个人的用户。
它为您节省了大量代码,我不知道为什么您不应该使用它而不管您填充的字段数量。