save() 不适用于 mongoose.Schema

Posted

技术标签:

【中文标题】save() 不适用于 mongoose.Schema【英文标题】:save() doesn't work on mongoose.Schema 【发布时间】:2018-01-05 17:17:54 【问题描述】:
const Data = require('./Models/Data');
...
let example = new Data( sample );
example.save( function ( err )
  console.log('test);
  if ( err ) 
    console.log('Error saving Data. 'Error: ', err);
  
);

知道为什么 save() 回调函数永远不会运行吗?我的意思是,“测试”文本没有显示,而“示例”的创建就像它应该的那样(我的意思是,当我打印它时,它看起来没问题)。 有任何想法吗? TIA

【问题讨论】:

【参考方案1】:

Mongoose async save() 函数与函数一起使用,这意味着您不需要向它传递回调函数,而是使用 then/catch 模式:

const Data = require('./Models/Data');
...
let example = new Data( sample );
example.save()
  .then(() => 
  console.log('test);
  )
  .catch((err) => 
    console.log('Error saving Data. 'Error: ', err);
  );

查看更多here

【讨论】:

保存成功了吗? then 部分只有在没有抛出错误的情况下才会运行 没有错误,没有“测试”,没有数据保存在集合中:/【参考方案2】:

正如 Nir ​​Levy 已经说过的:then 调用可以是另一种保存文档的方法。 您还可以尝试在保存的回调中提供第二个参数:

example.save((err, doc) => 
  console.log('test');
  if (err) 
    console.log('Error while saving data: ', err);
   else 
    console.log('document is: ', doc);
  
);

另请注意,您错过了 example.save 回调中 console.log() 上的右引号

您能否确保您的 mongodb 服务器正在运行并且您已连接到 mongodb 服务器?如果这可能导致问题?

【讨论】:

【参考方案3】:

这通常发生在您尚未连接到数据库时。您可以创建模型对象,但在数据库上运行的 Mongoose 函数都不起作用。相反,他们默默地失败了。确保使用连接功能进行连接。您还可以侦听连接和错误事件以查看您是否实际连接:

const dburl = `mongodb://localhost/testdb`;
mongoose.connect(dburl,  useMongoClient: true );
mongoose.connection.on('connected', () =>  console.log(`Mongoose connected to $dburl`); );
mongoose.connection.on('error', (err) =>  console.log(`Mongoose connection error: $err`); );
mongoose.connection.on('disconnected', () =>  console.log('Mongoose disconnected'); );

启动应用时注意终端,寻找Mongoose connected。最后,您可以在 Mongoose 中打开调试模式以查看幕后实际发生的情况:

mongoose.set('debug', true);

例如,您可以在 connect 调用下方添加它。

顺便说一句,你不必使用 promise 方法。您可以使用您已经在使用的回调版本。只需确保更正 console.log 中缺少 ' 的错误即可。

【讨论】:

以上是关于save() 不适用于 mongoose.Schema的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot 4 控制器错误:CrudRepository<Fournisseur,Long> 类型中的方法 save(S) 不适用于参数 (Fournisseur)

ObjectId 的 NodeJS/Mongoose 模式数组

Mongoose 填充包含 ref 的对象数组

Mongoose 填充包含 ref 的对象数组

数据库中的待办事项列表项更新不适用于 Django

在特定字段内推送数据