Node js和Mongo-更新数组内的对象索引(我无法使用ID查询)

时间:2019-07-18 01:30:08

标签: javascript node.js mongodb express mongoose

我想通过获取数组的ID并修改对​​象来更新数组内的对象。但是,我似乎无法进入该对象。
如果我通过电子邮件搜索用户,然后使用$set更新我的对象,则所有其他对象都会消失。
没有错误弹出,只是不起作用。
如果我尝试使用简单的findOne获取对象,即使我从mongo db复制并粘贴了ID,它也会返回null。 我一直在尝试5:30h解决此问题,但没有取得任何突破。请帮助我。

//my schemas
const mongoose = require('mongoose');

const ProdcutSchema = new mongoose.Schema({

    name:{
        type: String,
        required: true
    },

    productDescription:{
        type: String,
        required: true
    },

    pricePerUnit:{
        type: Number,
        required: true
    },

    productAmmount:{
        type:Number,
        required: true
    },

    /*productImagePath:{
        type:String,
        required: true
    }*/

});


const UserSchema = new mongoose.Schema({

    name:{
        type: String,

    },

    email:{
        type: String,

    },

    password:{
        type: String,

    },

    date:{
        type: Date,
        default: Date.now
    },

    products:[ProdcutSchema]
});


const User = mongoose.model('User', UserSchema);

module.exports = User;

//My ajax (ajax is working fine, I get all the correct data onto the backend)
$.ajax({
                type: 'PUT',
                url: '/dashboard/' + productID,
                contentType: "application/json",
                dataType:'json',
                data: JSON.stringify({
                    product_name        : productName,
                    price_PerUnit       : productPricePerUnit,
                    product_Description : productDscp,
                    product_Ammount     : productAmmount,
                }),
                success: getproducts()
            });

//Backend
//Update products
router.put('/dashboard/:id', (req, res)=>{
    const ID = req.params.id ;
    const {product_name, price_PerUnit, product_Description, product_Ammount} = req.body;           //Get access to ajax data using body parser

    if(!product_name || !price_PerUnit || !product_Description || !product_Ammount){
        res.send('Please fill out all fields with valid content');
    }else{
        User.findByIdAndUpdate(
            {_id : mongoose.Types.ObjectId(ID)},                          //Find collection with same email as user
            { $set: {                          //Pull out index that matches id
                name:product_name,
                productDescription: product_Description,
                pricePerUnit: price_PerUnit,
                productAmmount: product_Ammount
            }  } ,
            (err) => {
                 if (err) console.log(err);

        })


    }



});

注意:我尝试使用findOne findOneAndUpdatefindById和其他所有方法。

1 个答案:

答案 0 :(得分:0)

在代码中,您使用findByIdAndUpdate并传递包含ID而不是I本身的对象

尝试一下

User.findByIdAndUpdate(mongoose.Types.ObjectId(ID),                          //Find collection with same email as user
            { $set: {                          //Pull out index that matches id
                name:product_name,
                productDescription: product_Description,
                pricePerUnit: price_PerUnit,
                productAmmount: product_Ammount
            }  } ,
            (err) => {
                 if (err) console.log(err);

        })