Javascript 如何将键/值对数组更新为mongoose?

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中动态添加每个对象的“键”和“值”,而不必

背景:我有一个从Vue Axios发送的对象数组。这些对象是存储在req.body中的键值对

要求正文

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) => {
                   
        })