【问题标题】:Mongoose won't increment number fieldMongoose 不会增加数字字段
【发布时间】:2020-08-15 13:05:38
【问题描述】:

我正在使用 MongoDB 和 Mongoose。我目前有一个 like 按钮,当我单击它时,我想增加文档中的“喜欢”字段。目前我的文档具有以下架构:

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 }});

  })

【问题讨论】:

  • 检查查询对象我认为应该是{_id: req.body._id}。我想知道你的模型中喜欢的数据类型
  • @QuajoDuke 我将 id 更改为 _id 并且它仍然没有更改字段:( 数据类型是 Number
  • 您是否尝试过这样做 :: (stackoverflow.com/questions/6578178/…) ?我想这应该可以解决您的问题,如果不是,您的 Brote 架构如何?还提供示例文档..
  • 还尝试将 {new: true} 选项添加到 findOneAndUpdate。或者这样做:const brote = Brote.findById(query); Brote.UpdateOne(query, {$set: {'likes': brote.likes + 1}})

标签: node.js mongodb express mongoose


【解决方案1】:

似乎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()的文档:

找到一个匹配的文档,根据更新参数更新它,传递任何选项,并将找到的文档(如果有的话)返回给回调。 如果回调通过,则执行查询。

【讨论】:

    猜你喜欢
    • 2014-08-10
    • 2017-03-15
    • 1970-01-01
    • 2020-04-18
    • 2016-03-19
    • 2021-08-29
    • 2017-05-17
    • 1970-01-01
    • 2020-09-14
    相关资源
    最近更新 更多