javascript - 如何更新猫鼬特定值而不将其他值转换为null?
问题描述
我试图更新集合中的值,我让它工作的唯一方法是一起更新整个值,如果我更新一个值,如果排除更新文件(图像),其余值将变为空,我得到错误。
1)更新整体价值成功
1-2))猫鼬
2)当图像排除“无法读取未定义的属性'originalname'”时
模型
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')})
请帮忙
解决方案
//这是您一直在寻找的答案,我花了一个小时试图弄清楚。如果电子邮件和密码在对象内,则使用第一种语法,否则使用较短的语法
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}})
如果电子邮件和密码在对象内,请使用此
推荐阅读
- amazon-s3 - Rundeck S3 插件
- php - Twig 中的 PHP for 循环
- typescript - 打字稿如何重写接口的属性类型
- java - 如何直接在 JDL 中加密 JHIPSTER 应用程序的数据?
- c# - 如何统一更新gps?
- java - 在 Mockito 的测试方法中忽略非无效方法
- java - 命令“echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a”失败并在期间以 1 退出
- python - 如何使用字典变量制作多个子图?
- hadoop - Hadoop 数据节点因消息“无法加载 libhadoop”而关闭
- mvvm - UWP TimePicker MVVM