创建新对象时,猫鼬的值未增加

问题描述 投票:-1回答:1

这是我的代码,我想在任何用户给出评分后立即增加总计数。但是$ inc命令未运行,结果显示的是我设置为零的默认值。

给出的是我的架构。

const mongoose = require('mongoose');

const schema = mongoose.Schema;

let Rating = new schema({
    user_id:{
        type:mongoose.Types.ObjectId
    },
    stars:{
        type:Number
    },
    ratingCount:{
        type:Number,
        default:0
    }
})

const rating = mongoose.model('Rating', Rating);
module.exports = rating;

这是我要增加值的函数。

const express = require('express');
const Router = express.Router();

let Rating = require('../model/rating');

Router.route('/add/:userid').post((req,res)=>{

    new Rating({
        user_id: req.params.userid,
        $inc: {ratingCount:1},
        stars: req.body.stars
    })
    .save()
    .then(rating=>res.send(rating))
    .catch(err=>console.log(err));

});


module.exports = Router;

结果显示ratingCount的默认值。

enter image description here

node.js mongodb mongoose mongodb-query mean-stack
1个回答
0
投票

[您不必使用.save(),您可以简单地将.findOneAndUpdate()与选项{ new: true }一起使用,以返回更新的文档,如果找不到任何匹配的文档,.findOneAndUpdate()将返回null

代码:

const express = require("express");
const Router = express.Router();
let Rating = require("../model/rating");
Router.route("/add/:userid").post((req, res) => {
  Rating.findOneAndUpdate(
    { user_id: req.params.userid },
    { $inc: { ratingCount: 1 }, stars: req.body.stars },
    { new: true }
  )
    .then((rating) => res.send(rating))
    .catch((err) => console.log(err));
});
module.exports = Router;

通常.save()将跟踪对从查找调用返回的文档的更改。否则,如果不是.find()调用返回的猫鼬文档(如果您是正在形成的猫鼬对象,就像您现在正在做的那样),则如果在对象中找到_id,它将更新匹配的文档,如果没有匹配的文档存在_id或请求中不存在_id的情况,它将插入新文档。

© www.soinside.com 2019 - 2024. All rights reserved.