为了账号安全,请及时绑定邮箱和手机立即绑定

使用 mongo 中的 $inc 字段进行更新会出错

使用 mongo 中的 $inc 字段进行更新会出错

MM们 2022-06-16 10:40:43
所以我试图更新我的数据库中的一个字段以每次都增加它。像一个计数器,以便我不断获得更新的值。为此,我正在使用这个var CounterSchema = new Schema({  _id: String,  _const: String,  count: Number});然后我创建了我的模型const Counter = mongoose.model("counter", CounterSchema);然后我正在使用一个函数来更新我的集合中的一个字段,例如以下......async function getNextSequence() {   var count = await Counter.findOneAndUpdate(    { _const: "some" },    { $inc: { count: 1 } },    { new: true }  );    return count.count;}但是在运行上述函数时会出现一些错误。我已经确定给定的 _id 存在,这是我得到的错误……(node:10788) DeprecationWarning: Mongoose: `findOneAndUpdate()` and `findOneAndDelete()` without the `useFindAndModify` option set to false are deprecated. See: https://mongoosejs.com/docs/deprecations.html#findandmodify9:58 PM{ ValidationError: Url validation failed: counter: Cast to Number failed for value "Promise { <pending> }" at path "counter"9:58 PMat ValidationError.inspect (/rbd/pnpm-volume/f971d4d8-b5ba-4fbb-87f2-7580f1e7da53/node_modules/.registry.npmjs.org/mongoose/5.9.7/node_modules/mongoose/lib/error/validation.js:61:24)9:58 PMat formatValue (internal/util/inspect.js:493:31)9:58 PMat inspect (internal/util/inspect.js:191:10)9:58 PMat Object.formatWithOptions (util.js:84:12)9:58 PMat Console.(anonymous function) (console.js:191:15)9:58 PMat Console.log (console.js:202:31)9:58 PMJump Toat /app/server.js:107:399:58 PMat /rbd/pnpm-volume/f971d4d8-b5ba-4fbb-87f2-7580f1e7da53/node_modules/.registry.npmjs.org/mongoose/5.9.7/node_modules/mongoose/lib/helpers/promiseOrCallback.js:16:119:58 PMat /rbd/pnpm-volume/f971d4d8-b5ba-4fbb-87f2-7580f1e7da53/node_modules/.registry.npmjs.org/mongoose/5.9.7/node_modules/mongoose/lib/model.js:4860:219:58 PMat _done (/rbd/pnpm-volume/f971d4d8-b5ba-4fbb-87f2-7580f1e7da53/node_modules/.registry.npmjs.org/mongoose/5.9.7/node_modules/mongoose/lib/model.js:3120:16)9:58 PMat fn (/rbd/pnpm-volume/f971d4d8-b5ba-4fbb-87f2-7580f1e7da53/node_modules/.registry.npmjs.org/mongoose/5.9.7/node_modules/mongoose/lib/model.js:3135:18)
查看完整描述

2 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

您编写的函数的返回值是一个承诺,因为在等待之后


return行被执行并返回一个承诺。为了解决这个promise,你还必须用一个函数包装这个async函数。


async function run() {

  const sequence = await getNextSequence();

  console.log(sequence);

}


run();

现在你会得到你想要的。


查看完整回答
反对 回复 2022-06-16
?
四季花海

TA贡献1811条经验 获得超5个赞

你已经定义getNextSequence了一个异步函数,所以它会自动将它包装到一个 Promise 中。尝试将其更改为:

UrlModel.create({ url: url, counter: await getNextSequence() }, ...


查看完整回答
反对 回复 2022-06-16
  • 2 回答
  • 0 关注
  • 213 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号