javascript - 如何将键/值对数组更新为猫鼬?
问题描述
背景:我有一组从 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);
}
})
}
我希望我能够解释得足够好。让我知道是否有任何混淆。谢谢!
解决方案
这里的重点是,当您调用req.body.keyValue.key
and时req.body.keyValue.value
,它们位于一个 javascript 数组req.body.keyValue[]
中。
假设req.body.keyValue
将始终是一个有效的数组,{ key : '...', value : '...' }
您可以使用MongoDB $each 运算符来更新您的文档。
作为:
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 }
]
}
推荐阅读
- macos - FFMpeg 在 OSX Mojave 上访问 AVFoundation usb 子设备摄像头
- sql - 使用带有查询字符串的 sql 在下拉列表中显示数据
- java - 为什么我的 else if 语句不管我的 if 语句是否为真都会运行
- python - pyinstaller 给出“ImportError:DLL 加载失败”
- php - PHP last_activity
- java - Cordova 找不到 $ANDROID_HOME
- python - itertools.product 如何生成由元组定义的 n 维数组
- python - 如何找到趋势线并用 X 轴计算趋势线的斜率
- arrays - 如何将新元素从状态推入数组
- python - numpy 数组元素标识的奇怪行为