我有以下代码:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test')
var Schema = mongoose.Schema;
var schema = new Schema({name : String, inventory: {}});
var Character = mongoose.model('Character',schema);
var Frodo = new Character({name: 'Frodo',inventory:{ringOfPower: 1}});
Frodo.save();
Character.findOne({name : 'Frodo'},function(error, character){
console.log(character);
});
我正在运行它作为节点optionminimize.js并且null被记录到控制台。它在mongodb中保持不变,我打开了一个mongodb shell并运行
db.characters.findOne({name:'Frodo'})
并获得以下结果:
{
"_id" : ObjectId("582fc3bab386f00ed0e7fede"),
"name" : "Frodo",
"inventory" : {
"ringOfPower" : 1
},
"__v" : 0
}
为什么回调中的document参数接收null?
答案 0 :(得分:1)
Frodo.save()
是一个异步调用,因此它会返回 Promise ,并在Charachter.findOne
承诺解决之前立即按Frodo.save()
搜索该行。
因此,必须在成功保存字符后执行搜索,否则如前所述返回null,因此您的代码必须如下所示:
Frodo.save()
.then(function() {
Character.findOne({name : 'Frodo'}, function(error, character) {
console.log(character);
});
})