未能在 Mongoose 回调中保存

Posted

技术标签:

【中文标题】未能在 Mongoose 回调中保存【英文标题】:Failing to save inside a Mongoose callback 【发布时间】:2016-01-11 12:04:37 【问题描述】:

更新:我现在知道问题所在了。这是follow-up question。


我正在使用 Mongoose 和 MongoDB 的 MMEAN 堆栈。我在save() 上收到TypeError: undefined is not a function 错误,因为我试图在回调中使用 Mongoose 保存到 MongoDB。不知道如何正确保存。

这是我必须遵循的逻辑:

    检查 Foo 集合是否为空 如果 Foo 为空,则保存新的 Foo 文档 如果 Foo 不为空,则不要保存新的 Foo 文档

我相信除了有问题的mongoose.model("Foo").save(cb); 行之外的其余代码都没有错误。但以防万一,我已将所有内容都包含在这里。我正在从 routes/index.js 调用保存方法 addFoo()

// routes/index.js - No errors here
router.post('/foo', function(req, res, next)
  var foo = new Foo(req.body);
  foo.addFoo(function(err, bid)
    if(err) return next(err); 
    res.json(foo);
  );
);

// models/Foo.js - THE ERROR IS IN HERE

var mongoose = require('mongoose');
var FooSchema = new mongoose.Schema(
  creator: String
);
mongoose.model('Foo', FooSchema);

FooSchema.methods.addFoo = function(cb)

  // finds all documents of Foo into the "results" array
  this.model("Foo").find(function(err, results)
    if (err)return err;

    // if the Foo results array is empty
    if (results.length == 0)

      // THE LINE BELOW IS WHERE THE ERROR OCCURS
      // mongoose.model("Foo").save(cb);
      //                       ^
      // TypeError: undefined is not a function
      mongoose.model("Foo").save(cb);
      return;
    
  );

感谢您帮我调试。

【问题讨论】:

【参考方案1】:

mongoose.model("Foo").save(cb)是错误的。

您需要一个有效的模型来处理您定义的架构"Foo"var Foo = new mongoose.model('Foo', FooSchema)

然后您需要创建模型Foo 的实例,例如var test = new Foo(creator:'test'),然后您才能在实例test 上调用.save()

【讨论】:

有没有办法将 result.length == 0 作为布尔值传递给 addFoo 函数? 我之前的评论有一个后续问题,请查看:***.com/q/33114479/4825465

以上是关于未能在 Mongoose 回调中保存的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose ODM,保存前更改变量

Mongoose ODM,保存前更改变量

文档不会使用带有 mongoose 的 save() 方法保存

带有 Promise 和回调的猫鼬

mongoose基本增删改查

Node.JS + Mongoose 回调地狱