所以我试图更新我的数据库中的一个字段以每次都增加它。像一个计数器,以便我不断获得更新的值。为此,我正在使用这个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();
现在你会得到你想要的。

四季花海
TA贡献1811条经验 获得超5个赞
你已经定义getNextSequence
了一个异步函数,所以它会自动将它包装到一个 Promise 中。尝试将其更改为:
UrlModel.create({ url: url, counter: await getNextSequence() }, ...
添加回答
举报
0/150
提交
取消