背景:我有一个从Vue Axios发送的对象数组。这些对象是键值对,存储在req.body中。
需求主体
keyValue: [{key:"some key", value:"some value"}, {key:"some key2", value:"some value2"}]
注意:我可以期望收到一个带有大量对象的req.body。如果不添加[]或req.body.keyValue [0],则无法访问对象中的“键”和“值”。
如何动态地将每个对象的“键”和“值”添加到猫鼬中,而不必显式调用特定对象?
我正在尝试执行以下操作:(尝试失败)
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:{
Key: req.body.keyValue.key,
Value: req.body.keyValue.value
}
}
},
(err,result)=>{
if(err){
console.log(err);
res.status(400).send('Error')
}else{
res.status(200).send(result);
}
})
}
我希望我能解释得足够好。让我知道是否有任何混淆。谢谢!
答案 0 :(得分:0)
这里的意思是,当您调用req.body.keyValue.key
和req.body.keyValue.value
时,它们位于JavaScript数组req.body.keyValue[]
中。
假设req.body.keyValue
始终是{ key : '...', value : '...' }
的有效数组,则可以使用MongoDB $each operator来更新文档。
为:
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 }
]
}
答案 1 :(得分:0)
用户架构
Apps running on Windows Containers are available only in Hyper-V Container enabled SKU.
更新代码
userId: {
type: String
},
password: {
type: String
},
friends: [{
userId: String,
followSent: Boolean,
followAccepted: Boolean,
followbackSent: Boolean,
followbackAccepted: Boolean,
inchats: Boolean
}]