Дело в том, что когда вы вызываете req.body.keyValue.key
и req.body.keyValue.value
, они находятся в javascript массиве req.body.keyValue[]
.
Предполагая, что req.body.keyValue
всегда будет действительным массивом с { key : '...', value : '...' }
вы можете использовать MongoDB $ каждый оператор для обновления вашего документа.
As:
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const Schema = new Schema({
Pair: [{
key: String,
value: Number
}]
});
router.post("/", (req, res) => {
User.update(
{},
{
$push: {
Pair:{
$each : req.body.keyValue
}
}
},
(err,result)=>{
if(err){
console.log(err);
res.status(400).send('Error')
}else{
res.status(200).send(result);
}
}
);
}
Теперь просто будьте осторожны, чтобы req.body.keyValue
имел правильная прописная буква на каждом элементе, поэтому у вас нет *K*ey
и / или *k*ey
, которые не будут соответствовать вашей схеме. =]
Редактировать
Просто чтобы объяснить, как будет работать оператор $ each, см. Следующий пример:
req.body = {
keyValue : [
{ key : "key1", value : 1 },
{ key : "key2", value : 2 }
]
};
Документ в коллекции User
перед обновлением:
{
_id : ObjectId(),
Pair : [
{ key : "key_A", value : 99 }
]
}
После .update()
с оператором $each
ожидаемый обновленный документ:
{
_id : ObjectId(),
Pair : [
{ key : "key_A", value : 99 },
{ key : "key1", value : 1 },
{ key : "key2", value : 2 }
]
}