创建新对象时,猫鼬中的值不会增加
Posted
技术标签:
【中文标题】创建新对象时,猫鼬中的值不会增加【英文标题】:Value not incrementing in mongoose when creating a new object 【发布时间】:2020-09-29 07:04:18 【问题描述】:这是我的代码,我想在任何用户给出评分后立即增加计数总数。但是 $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 的默认值。
【问题讨论】:
请不要包含图片,有文字格式的代码!!你想同时将req.body.stars
设置为stars
& inc ratingCount
吗?
是的,这就是我想要的
我已经更新了格式
如果@whoami 的回答解决了您的问题,请采纳(What should I do when someone answers my question?)表示您的问题已结束,否则请留言告知 whoami 和任何读者
【参考方案1】:
您不需要使用.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 调用返回的文档的更改。否则,如果它不是从.find()
返回的猫鼬文档,如果它是你正在形成的猫鼬对象,就像你现在正在做的那样,那么如果它在对象中找到_id
,它将更新匹配的文档,否则如果没有匹配的文档存在 _id
或在请求中不存在 _id
时,它将插入新文档。
【讨论】:
以上是关于创建新对象时,猫鼬中的值不会增加的主要内容,如果未能解决你的问题,请参考以下文章