我有一个这样的调查表:
{
id:id,
日期:日期:,
客户:[{
客户id:id,
联系人:[{
联系人_id:id,
分数:数字,
反馈:字符串,
电子邮件:String
}]
}]
}
我需要更新特定联系人下的得分
和反馈
字段。目前,我正在运行更新,如下所示:
函数保存分数(obj){
var dfd=q.defer();
var survey=surveys.get(obj.survey\u id);
调查
.pluck({clients:'contacts'})
.run()
。然后(结果=>{
结果.客户.forEach((项目,外部索引)=>{
item.contacts.forEach((项、索引、数组)=>{
if(编号(项目联系人id)==编号(目标联系人id)){
数组[index].score=obj.score;
日志(outerIndex,index);
}
});
});
返回调查。更新(结果)。运行()
})
。然后(结果=>;dfd.resolve(结果))
.catch(err=>;dfd.resolve(err));
回报dfd承诺;
};
当我查看update方法时,它指定如何更新嵌套的key:value对。但是,我找不到任何示例来更新数组中的单个项
有没有更好、更干净的方法来更新嵌套数组中的项
您可能需要获取数组,过滤出数组中所需的值,然后再次将其附加到数组中。然后可以将更新后的数组传递给
update
方法
示例
假设您有一个包含两个客户端的文档,这两个客户端都有名称
和分数
,您希望更新其中一个客户端的分数:
{
“客户”:[
{
“姓名”:“雅各布”,
“分数”:200分
} ,
{
“姓名”:“豪尔赫”,
“得分”:57分
}
] ,
“id”:“70589f08-284c-495a-b089-005812ec589f”
}
您可以获取该特定文档,使用annonymous函数运行update
命令,然后将更新后的新数组传递到clients
属性中
r.table('jacob').get(“70589f08-284c-495a-b089-005812ec589f”)
.更新(功能(行){
返回{
//获取所有客户端,除了我们要更新的客户端
客户端:行(“客户端”).filter(函数(客户端){
返回客户端('name').ne('jorge'))
})
//附加一个新的客户端和更新信息
.append({name:'jorge',分数:57})
};
});
我确实认为这有点麻烦,可能有一种更好、更优雅的方法,但这应该能解决你的问题
数据库架构
也许值得为您的所有联系人创建一个contacts
表,然后对您的数据进行某种连接。然后,客户端
数组中的联系人
属性将类似于:
{
id:id,
日期:日期:,
客户:[{
客户id:id,
联系大学分数:{
Id:分数(数字)
},
联系单位反馈:{
Id:反馈(字符串)
}
}]
}