【问题标题】:Auto-Incrementing Sequence Field Mean Stack自增序列字段均值堆栈
【发布时间】:2020-06-26 01:59:03
【问题描述】:

我创建了一个用于维护ticket_no 的集合,其文档如下所示,

{
  id:"TICKET_ID",
  TICKET_NO:7
}

现在,当我尝试为 ticket_id 查找 OneAndUpdate 时,将 TICKET_NO 递增 1,

function get(){
     var ret = Sequence.findOneAndUpdate(
            {
                query: { _id: 'TICKET_ID' },
                update: { $inc: { TICKET_NO: 1 } },
                new: true
            }
        );

        console.log(ret.TICKET_NO)
        return ret.TICKET_NO;
}

函数返回null值而不是ticket no

【问题讨论】:

  • 嘿,你给 mongo 打药了吗?如果它返回 null,可能是因为数据集为空。尝试console(Sequence.find()) 之类的方法,您将在尝试获取信息之前看到所有文档,并确保文档已保存。
  • 我看到你在这里打印找到的文档console.log(ret.TICKET_NO),你看到了什么?
  • undefinedconsole.log(ret.TICKET_NO) 的结果
  • 数据集不为空
  • @JorgePires Mate,这只是一个回调问题。 Async/await 会解决它。

标签: node.js mongodb mongoose mean-stack mongoose-auto-increment


【解决方案1】:

您在 ret 中得到的是 findOneAndUpdate 函数对象,而不是您的实际文档。

您需要监听回调或使用 async/await 以使值在那里,

尝试其中一种,

async function get(){
     var ret = await Sequence.findOneAndUpdate(
          { _id: 'TICKET_ID' },
          { $inc: { TICKET_NO: 1 } },
          { new: true }
     );

     console.log(ret.TICKET_NO) // now the ret is the doc you need
     return ret.TICKET_NO; // prints correctly
}

或者,

function get(){
     Sequence.findOneAndUpdate(
          { _id: 'TICKET_ID' },
          { $inc: { TICKET_NO: 1 } },
          { new: true },
          function(err, ret) {
            if (err) {
              console.error(err)
            } else {
              console.log(ret.TICKET_NO) //successful callback returns ret
            }
          });
     );
}

【讨论】:

  • 这两种方法都有效。但是序列集合上的 TICKET_NO 不会更新,总是得到相同的票号。请帮助解决同样的问题
  • 什么是。 TICKET_NO 你收到了吗?
  • {id:"TICKET_ID", TICKET_NO:7 }..ticket_no 应该在每次调用时增加 1。unfrtntly 它不会在数据库上更新。所以函数总是返回 7 作为 ticket_no
  • 更新了答案以反映变化。您的选项,即new: true 无效,因为它的格式不正确。更改应该会起作用。
猜你喜欢
  • 2018-12-28
  • 1970-01-01
  • 2021-12-08
  • 2018-11-29
  • 1970-01-01
  • 2011-11-20
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多