【问题标题】:Writing to MongoDB without waiting for response在不等待响应的情况下写入 MongoDB
【发布时间】:2019-10-15 15:02:40
【问题描述】:

我正在尝试弄清楚如何使用 Mongoose 和 Node.js 写入 MongoDB 而无需等待响应。写入 MongoDB 的典型方法是使用回调语法或使用 await/async 模式。除非您指定回调或等待响应,否则这两种模式都不会执行查询。

有没有办法以“尽力而为”的方式写入 MongoDB? IE。打个电话就行了,不用等响应,如果成功就很好,如果没有,没问题。

编辑:

代码:

异步/等待模式:

const doc = await Product.findByIdAndUpdate('prod1', {$inc: {viewed: 1}});
console.log(doc);

回调模式

Product.findByIdAndUpdate('prod1', {$inc: {viewed: 1}, func(err, doc) {
    console.log(doc)
});

这两个都在等待响应。

【问题讨论】:

  • 添加一些有问题的代码..!你试过什么?
  • 我的意思是,就像我说的,我知道如何使用 await/async 或回调来做到这一点。您希望我使用每种语法编写标准查询吗?似乎只是为了写代码而写代码,而不是增强问题的含义。
  • 我在要求代码建议现有代码中的方式..!答案很简单..只需将函数回调放在 mongo 查询之外或等待查询之前..!
  • 不,这对其他阅读本文的人不起作用。

标签: node.js mongodb mongoose


【解决方案1】:

您可以使用w:0 write concern setting 进行写入。这将指示 MongoDB 进行写入,但不等待反馈。例如:

  conn.db('test').collection('test').insertOne({'a': 1}, {'w': 0}, function(err, res) {
    assert.equal(null, err);
    console.log(res);
  })

默认写入关注点是w:1(等待您连接到的节点的确认)。如果您使用w:1 检查上述代码的res 输出,它将显示:

  ...
  insertedCount: 1,
  ...

相比之下,使用w:0会显示:

  ...
  insertedCount: undefined,
  ...

注意:虽然使用此设置会尽最大努力快速返回写入,但这本质上是用于写入的 UDP。使用风险自负。

【讨论】:

    猜你喜欢
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2014-10-22
    • 1970-01-01
    相关资源
    最近更新 更多