javascript - 在 MongoDB/Node.js 中使用 findOneAndUpdate 自动增加值的问题
问题描述
好吧,我正在尝试在节点中进行自动增量。
所以我有一个简单的功能,我在这里找到了如何将自动增量添加到 mongodb/node.js 中的现有集合?
// Increment DB Value
exports.getNextSequenceValue = async function (sequenceName) {
try {
const seqNum = await db.collection('counters').findOneAndUpdate({
_id: sequenceName
}, {
$inc: {
seq: 1
}
}, {
returnNewDocument: true
});
// Check if response has seqNum.seq exists
console.log(seqNum.value.seq);
if (seqNum && seqNum.value.seq) {
return seqNum.value.seq
} else {
return 'what ever you want '
}
} catch (err) {
console.error(err)
}
}
和我使用它的控制器。
const user = new User({
profile: {
firstname: req.body.firstname,
lastname: req.body.lastname,
location: req.body.location,
status: 1,
avatar: "/uploads/avatars/defaultProfilePic.jpg"
},
email: req.body.email,
password: req.body.password,
xid: core.getNextSequenceValue('userid') // ----HERE ITS FUNCTION-----
});
console.log(core.getNextSequenceValue('userid')) //---- [object Promise]X ---
User.findOne({
email: req.body.email
}, (err, existingUser) => {
if (err) {
return next(err);
}
if (existingUser) {
req.flash('errors', {
msg: 'Account with that email address already exists.'
});
return res.redirect('/signup');
}
user.save((err) => {
if (err) {
return next(err);
}
req.logIn(user, (err) => {
if (err) {
return next(err);
}
res.redirect('/');
});
});
});
};
但现在我得到错误。
ValidationError: User validation failed: xid: Cast to Number failed for value "Promise { <pending> }" at path "xid"
不知道如何解决它。谢谢你的帮助。
解决方案
好的,您的问题似乎与new : true
您使用时有关findOneAndUpdate()
,它必须returnNewDocument: true
更多,您需要等待功能,这需要一些时间才能完成,但不是它的响应。请记住始终使用 try-catch 块包装您的 async 和 await。
exports.getNextSequenceValue = async function (sequenceName) {
try {
const seqNum = await db.collection('counters').findOneAndUpdate({
_id: sequenceName
}, {
$inc: {
seq: 1
}
},
{ returnNewDocument: true }
);
// Check if response has seqNum.seq exists
console.log(seqNum.seq);
if (seqNum && seqNum.seq) { return seqNum.seq } else {
return 'what ever you want '
}
} catch (err) {
console.error(err)
}
}
推荐阅读
- c# - 控制台应用程序下载网站获得 401 Unauthorized
- reactjs - 如何在我的动态组件中传递道具
- c++ - 使用受保护的继承公开基类转换函数
- linux - 寻找匹配时意外的 EOF
- windows - 在 Windows 10 上的 pyspark shell 中找不到 python 错误
- go - 偶尔的“切片超出范围”恐慌
- acumatica - 使用自定义控制器进行匿名身份验证
- python - 该脚本需要删除未使用的卷,除非它们具有某些特定值
- javascript - 使用 jQuery/JS 将字符串类型的时间戳转换为“DD/MM/YYYY hh:mm A”格式
- python - 使用 tf.GradientTape() wrt 输入的梯度为无(Tensorflow 2.4)