gpt4 book ai didi

node.js - Mongoose 集合没有得到更新

转载 作者:可可西里 更新时间:2023-11-01 09:38:56 25 4
gpt4 key购买 nike

我正在尝试更新 mongoose 集合名称 counter
但它没有得到更新。

柜台收款

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var counterSchema = new Schema({
_id: {type: String, required: true},
sequence_value: {type: Number, default: 1}
});

var Counter = module.exports = mongoose.model('Counter', counterSchema);

API

router.post('/increment',function(req, res, next){
console.log('Sequence Counter::' + getNextSequenceValue("productId"));
)};

getNextSequenceValue 方法

function getNextSequenceValue(sequenceName){

var sequenceDocument = Counters.findOneAndUpdate({
query:{_id: sequenceName },
update: {$inc:{sequence_value:1}},
new:true,
upsert: true
});
console.log('Counter value::' + sequenceDocument.sequence_value);
return sequenceDocument.sequence_value;
}

但每次我点击 /increment API 时,console.log 都会打印 undefined

最佳答案

你总是会得到undefined,因为sequenceDocument是一个Promise,如果更新操作成功或将要更新的文档,它稍后会解析如果不是,则拒绝错误。在您的情况下,console.log 语句将在数据库操作完成之前运行。这是因为 findOneAndUpdate 是一个返回 Promise 对象的异步操作。

更新可能会失败,因为您以不正确的方式将参数传递给 findOneAndUpdate。该函数接受查询作为第一个参数,更新操作作为第二个参数,查询选项作为第三个参数。

您可以通过以下方式重写getNextSequenceValue:

function getNextSequenceValue(sequenceName) {
return Counters.findOneAndUpdate(
{ // query
_id: sequenceName
},
{ $inc: { sequence_value: 1 } }, // update operation
{ // update operation options
new: true,
upsert: true
}
).then(sequenceDocument => sequenceDocument.sequence_value)
}

它现在将返回一个 Promise,它将使用序列值解析。您可以像这样在您的 Controller 中使用它:

router.post('/increment', function(req, res, next) {
getNextSequenceValue('productId')
.then(sequenceValue => {
console.log(sequenceValue)
})
.catch(error => {
// handle possible MongoDB errors here
console.log(error)
})
})

关于node.js - Mongoose 集合没有得到更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48240586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com