如何先保存并在下面找到mongoose

时间:2015-11-13 03:28:14

标签: javascript node.js mongoose

我是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()。然后。请帮我把它搞定。 非常感谢

2 个答案:

答案 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