这是我的代码,我想在任何用户给出评分后立即增加总计数。但是$ 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的默认值。
答案 0 :(得分:0)
您不必使用.save()
,而可以使用带有选项{ new: true }
的{{3}}返回更新的文档,如果找不到任何匹配的文档,.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
的文档,则会插入新文档。