Javascript 如何将键/值对数组更新为mongoose?
背景:我有一个从Vue Axios发送的对象数组。这些对象是存储在req.body中的键值对 要求正文Javascript 如何将键/值对数组更新为mongoose?,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,背景:我有一个从Vue Axios发送的对象数组。这些对象是存储在req.body中的键值对 要求正文 keyValue: [{key:"some key", value:"some value"}, {key:"some key2", value:"some value2"}] 注意:我预计会收到一个带有大量数组对象的req.body。如果不添加[]或req.body.keyValue[0],我无法访问对象中的“键”和“值” 如何在mongoose中动态添加每个对象的“键”和“值”,而不必
keyValue: [{key:"some key", value:"some value"}, {key:"some key2", value:"some value2"}]
注意:我预计会收到一个带有大量数组对象的req.body。如果不添加[]或req.body.keyValue[0],我无法访问对象中的“键”和“值”
如何在mongoose中动态添加每个对象的“键”和“值”,而不必显式调用特定对象
我正在尝试这样做:(尝试失败)
我希望我能解释得足够清楚。如果有任何困惑,请告诉我。谢谢 这里的要点是,当调用
req.body.keyValue.key
和req.body.keyValue.value
时,它们位于javascript数组req.body.keyValue[]
中
假定req.body.keyValue
将始终是一个具有{key:'…',value:'…}
的有效数组,您可以使用更新文档
作为:
现在请注意,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 }
]
}
使用$each
操作符执行.update()
后,预期的更新文档:
{
_id : ObjectId(),
Pair : [
{ key : "key_A", value : 99 },
{ key : "key1", value : 1 },
{ key : "key2", value : 2 }
]
}
用户模式
userId: {
type: String
},
password: {
type: String
},
friends: [{
userId: String,
followSent: Boolean,
followAccepted: Boolean,
followbackSent: Boolean,
followbackAccepted: Boolean,
inchats: Boolean
}]
更新代码
userModel.updateOne({ userId: "MyId" , "friends.userId": "frndId"},{
$set: {
'friends.$.followSent': true}},(err, docs) => {
})
在您的示例中,它不会将req.body.keyValue保存到Pair模式中的key和value属性。有没有办法用$each保存一个模式结构?找不到一个例子。谢谢
$each
操作符将在MongoDB端单独与数组中的每个元素交互。我假设您在构造User
变量时使用了模式,在这种情况下,mongoose将在与集合的每次交互中应用模式。我将编辑答案以提供一个示例。
userId: {
type: String
},
password: {
type: String
},
friends: [{
userId: String,
followSent: Boolean,
followAccepted: Boolean,
followbackSent: Boolean,
followbackAccepted: Boolean,
inchats: Boolean
}]
userModel.updateOne({ userId: "MyId" , "friends.userId": "frndId"},{
$set: {
'friends.$.followSent': true}},(err, docs) => {
})