我正在使用MongoDB和Mongoose。我目前有一个 like 按钮,当我单击它时,我想增加文档中的“ likes”字段。目前,我的文档具有以下架构:
brote {
name:
content:
created:
likes:
}
并且我已经测试查询中的ID与数据库中对象的ID相匹配。
我咨询了How do I increment a Number value in Mongoose?和Incrementing a value with mongoose?,但是这些解决方案似乎并未对我的数据库进行任何更改。也许有些明显的东西让我失踪了?
Index.js
mongoose.connect('mongodb://localhost:27017/bromies', { useUnifiedTopology: true, useNewUrlParser: true });
mongoose.set('useFindAndModify', false);
var Brote = mongoose.model('Brote', broteFormSchema);
app.post('/likes', (req, res) => {
let query = { id: req.body._id};
Brote.findOneAndUpdate(query, {$inc: { 'likes': 1 }});
})
答案 0 :(得分:2)
似乎findOneAndUpdate
方法在没有回调的情况下不起作用。尝试传递这样的回调:
let query = { _id: req.body._id}; // It is _id, not id
Brote.findOneAndUpdate(
query,
{$inc:{ likes: 1}},
(err, brote) => { // callback
console.log(brote);
}
)
修改:
它不起作用的原因是,如果未将回调传递给它,它将返回查询。您可以在返回的查询上调用.exec()
来执行它。
摘自findOneAndUpdate()的文档:
查找匹配的文档,根据更新arg对其进行更新,传递任何选项,然后将找到的文档(如果有)返回给回调。 如果传递了回调,则执行查询。