首页 > 解决方案 > 如何更新猫鼬特定值而不将其他值转换为null?

问题描述

我试图更新集合中的值,我让它工作的唯一方法是一起更新整个值,如果我更新一个值,如果排除更新文件(图像),其余值将变为空,我得到错误。

1)更新整体价值成功

1-2))猫鼬

2)当图像排除“无法读取未定义的属性'originalname'”时

3)更新图像时,仅将其余值转换为 null

模型

const mongoose = require ("mongoose");
const user = require('../models/usermodel')
const Schema = mongoose.Schema;
const sellerSchema= mongoose.model('seller',new mongoose.Schema({
image:{type:String,
    required:true}
password:{type:String,
          required:true}
lastName:{type:String,
          required:true}
name:{type:String,
      required:true}
numTel:{type:Number,
        required:true}
email:{type:String,
       required:true}
}))
module.exports = sellerSchema;

控制

const sellermodel = require('../models/sellermodel');

var fs = require('fs');

const multer = require('multer');

const upload = multer({dest:__dirname +'/uploads/images'});

module.exports = {sellerupdate: function (req, res) {

sellermodel.updateOne({_id: req.params.id},

        {$set:{name:req.body.name,

        lastName:req.body.lastName,

        email:req.body.email,

        password:req.body.password,

        image:req.file.originalname,}},

        function (err,data) {

        if (err) {res.json({ msg: 'product not found'+err })
        }
        else {
          res.json({ msg: 'product updated successfully'+data} )
        }

    })
  }
}

路由器

 const sellercontrols = require("../controllers/sellercontrols");

 const router = require("express").Router();

 const multer = require('multer');

 const upload = multer({dest:__dirname + '/uploads/images/'});

 router.put('/update/:id',upload.single('image'),sellercontrols.sellerupdate);

 module.exports = router;

服务器

const express = require('express');

const app = express();

const bodyParser = require("body-parser");

const sellerrouter= require('./routers/sellerrouter');

const db = require('./models/db');

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({

extended: false }));

app.use("/seller",sellerrouter);

app.listen(8080,function(){

console.log('server is running')})

请帮忙

标签: javascriptnode.jsexpressmongoosepostman

解决方案


//这是您一直在寻找的答案,我花了一个小时试图弄清楚。如果电子邮件和密码在对象内,则使用第一种语法,否则使用较短的语法

const password = "new password";
const email = "new email"; 
let result = collection find({})
result  =  result.objectName

// 现在像这样在结果对象中更新电子邮件和密码

result.email = email;
result.password = password

//然后将其发送回数据库

collection.updateOne({}, {$set: {fieldName: result}})

//就是这样,或者如果它不在对象中,则使用这个较短的

collection.findOneAndUpdate({}, {$set: {email, password}})

如果电子邮件和密码在对象内,请使用此


推荐阅读