【发布时间】:2021-12-09 08:35:41
【问题描述】:
我有一个程序,单击按钮后,随机获取的 MongoDB 文档的“喜欢”属性应该会更新。但是,事实并非如此。我可以通过按钮调用获取的文档,而不是实际更新它:
MongoClient.connect(DBconnection, { useUnifiedTopology: true })
.then(client => {
const db = client.db(database);
const collection = db.collection(table);
//R has been previously defined as a random number
let doc = function(data) {
return db.collection(table).find().limit(-1).skip(R - 1).next()
.then(results => { return results })
}
//This is supposed to update the value of the randomly fetched document
app.post("/", (req, res) => {
let w = doc()
w.then(function(results) {
console.log(results) //This correctly returns the random document
})
//This line is meant to update document "w", but it does not.
db.collection(table).updateOne({ w }, { $set: { likes: "clicked" + R } })
.then(result => {
res.redirect("/")
})
.catch(error => console.error(error))
});
});
ejs文件中的按钮就这么简单:
<form action="/" method="POST">
<button id="updoot" type="submit">upvote</button>
</form>
【问题讨论】:
-
updateOne函数是否将 promise 作为过滤参数?那是有线的! -
您可能想根据
w字段进行更新?然后使 post "/" 处理程序异步,还在doc()之前添加await关键字,提示:_ 并且您不需要从updateOne捕获错误,express.js 会为您完成,只需返回承诺对象。
标签: javascript node.js mongodb express promise