我是nodejs和mongoose的初学者。
所以我有这样的麻烦:
之后,创建一个架构,模型并将数据存储到它并保存,我想再次找到。
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var typePlantSchema = new Schema({
namePlant:String,
estimateDuration:Number,
conditionPh:Number
});
var typePlantModels= mongoose.model('typePlant',typePlantSchema);
var typePlantModel = new typePlantModels();
mongoose.connect('mongodb://localhost/AeroDB', function (err) {
if(err) {
console.log('connection error', err);
} else {
console.log('connection successful');
}
});
typePlantModel.namePlant='tam';
typePlantModel.estimateDuration=10;
typePlantModel.conditionPh=7;
typePlantModel.save();
typePlantModels.find({namePlant:"tam"},function(err,docs){
if(err){
console.log(err);
}
else {console.log(docs);}
});
但是当我第一次运行我的代码时,我无法获得任何找到的结果。如果再次运行它,我发现1个结果(事件2结果)。这意味着在保存功能之前查找功能超出。我认为这取决于回调函数的顺序。你有任何解决方案可以使它工作吗? of coure,不将find函数放在save函数中。 请帮我做。
更新更多问题
实际上,我想将它转移到数据库API。它看起来像是:
var typePlantModels= mongoose.model('typePlant',typePlantSchema);
var typePlantModel = new typePlantModels();
typePlant.prototype=typePlantModel;
typePlant.prototype.findByName=function(name){
self=this;
typePlantModels.find({namePlant:self.namePlant},function(err,docs){
console.log(docs)}
}
module.exports=typePlant;
我可以把它放在保存功能上或使用save()。然后。请帮我把它搞定。 非常感谢
答案 0 :(得分:2)
find()
功能在save()
完成之前正在运行。
解决方案是使用save()
的回调函数。
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var typePlantSchema = new Schema({
namePlant:String,
estimateDuration:Number,
conditionPh:Number
});
var typePlantModels= mongoose.model('typePlant',typePlantSchema);
var typePlantModel = new typePlantModels();
mongoose.connect('mongodb://localhost/AeroDB', function (err) {
if(err) {
console.log('connection error', err);
} else {
console.log('connection successful');
}
});
typePlantModel.namePlant='tam';
typePlantModel.estimateDuration=10;
typePlantModel.conditionPh=7;
typePlantModel.save().then(function(){
typePlantModels.find({namePlant:"tam"},function(err,docs){
if(err){
console.log(err);
}
else {console.log(docs);}
});
});
阅读:.save()
| Mongoose Documentation
更新1:
要使函数外部,而不是在回调中使用匿名函数,请在外部声明函数:
typePlantModel.save().then(findThis("something"));
function findThis(val){
typePlantModels.find({namePlant:val},function(err,docs){
if(err){
console.log(err);
}
else {console.log(docs);}
});
}
现在,您可以随时使用findThis()
。
答案 1 :(得分:0)
由于节点是异步的,因此您需要在保存的回调中使用find
。像这样:
typePlantModel.save(function(){
typePlantModels.find({namePlant:"tam"},function(err,docs){
if(err){
console.log(err);
} else {
console.log(docs);
}
});
为了使此代码更清晰,我建议您阅读Pagekit Translation guide