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

Javascript 使用mongo中的$inc字段进行更新时出错,javascript,mongodb,mongoose,mongodb-query,Javascript,Mongodb,Mongoose,Mongodb Query,所以我试图更新数据库中的一个fied,以便每次都增加它。比如计数器,这样我就可以不断得到更新的值。所以我用这个 var CounterSchema = new Schema({ _id: String, _const: String, count: Number }); 然后我创建了我的模型作为 const Counter = mongoose.model("counter", CounterSchema); 然后我使用一个函数来更新我的集合中的一个字段,如以下所示 async

所以我试图更新数据库中的一个fied,以便每次都增加它。比如计数器,这样我就可以不断得到更新的值。所以我用这个

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#findandmodify

9:58 PM

{ ValidationError: Url validation failed: counter: Cast to Number failed for value "Promise { <pending> }" at path "counter"

9:58 PM

at 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 PM

at formatValue (internal/util/inspect.js:493:31)

9:58 PM

at inspect (internal/util/inspect.js:191:10)

9:58 PM

at Object.formatWithOptions (util.js:84:12)

9:58 PM

at Console.(anonymous function) (console.js:191:15)

9:58 PM

at Console.log (console.js:202:31)

9:58 PM

Jump Toat /app/server.js:107:39

9:58 PM

at /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:11

9:58 PM

at /rbd/pnpm-volume/f971d4d8-b5ba-4fbb-87f2-7580f1e7da53/node_modules/.registry.npmjs.org/mongoose/5.9.7/node_modules/mongoose/lib/model.js:4860:21

9:58 PM

at _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 PM

at 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)

9:58 PM

at callbackWrapper (/rbd/pnpm-volume/f971d4d8-b5ba-4fbb-87f2-7580f1e7da53/node_modules/.registry.npmjs.org/mongoose/5.9.7/node_modules/mongoose/lib/model.js:3089:20)

9:58 PM

at /rbd/pnpm-volume/f971d4d8-b5ba-4fbb-87f2-7580f1e7da53/node_modules/.registry.npmjs.org/mongoose/5.9.7/node_modules/mongoose/lib/model.js:4837:16

9:58 PM

at /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:11

9:58 PM

at /rbd/pnpm-volume/f971d4d8-b5ba-4fbb-87f2-7580f1e7da53/node_modules/.registry.npmjs.org/mongoose/5.9.7/node_modules/mongoose/lib/model.js:4860:21

9:58 PM

at $__save.error (/rbd/pnpm-volume/f971d4d8-b5ba-4fbb-87f2-7580f1e7da53/node_modules/.registry.npmjs.org/mongoose/5.9.7/node_modules/mongoose/lib/model.js:489:16)

9:58 PM

errors:

9:58 PM

{ counter:

9:58 PM

{ CastError: Cast to Number failed for value "Promise { <pending> }" at path "counter"

9:58 PM

at new CastError (/rbd/pnpm-volume/f971d4d8-b5ba-4fbb-87f2-7580f1e7da53/node_modules/.registry.npmjs.org/mongoose/5.9.7/node_modules/mongoose/lib/error/cast.js:29:11)

9:58 PM

at model.$set (/rbd/pnpm-volume/f971d4d8-b5ba-4fbb-87f2-7580f1e7da53/node_modules/.registry.npmjs.org/mongoose/5.9.7/node_modules/mongoose/lib/document.js:1233:9)

9:58 PM

at model._handleIndex (/rbd/pnpm-volume/f971d4d8-b5ba-4fbb-87f2-7580f1e7da53/node_modules/.registry.npmjs.org/mongoose/5.9.7/node_modules/mongoose/lib/document.js:972:14)

9:58 PM

您已经将
getNextSequence
定义为一个异步函数,因此它将自动将其包装为一个承诺。尝试将其更改为:

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

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

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

async function run() {
  const sequence = await getNextSequence();
  console.log(sequence);
}

run();

现在,您将得到您想要的。

我刚刚通过将所有内容嵌套在表中解决了问题。您的解决方案将不起作用。因为那时我的调用乐趣必须是异步的。无论如何,谢谢。
async function run() {
  const sequence = await getNextSequence();
  console.log(sequence);
}

run();