我试图更新嵌套数组中的对象,下面是我的状态示例。我试图在目标内更新对象,我成功地更新了对象。
但是
每次我更新任何对象。索引0处的对象将获得所有对象的副本。我更新的次数越多,它就会创建更多的副本,它们就会嵌套在索引0处的对象中。
索引0处的对象也将使用任何对象的最新更新进行更新。
{
list: {
'0': {
id: 0,
dueDate: 'By May 28th I Will have: ',
goals: [
{
0: {...}
1: {...}
3: {...}
}
]
}
'1':{
id: 0,
dueDate: 'By June 31st I Will have: ',
goals: [
{
2: {...}
4: {...}
}
}
keyName=列表中对象的索引。(位于“0”和“1”上方的两个值:{)
return {
...state,
[action.payload.keyName]: {
...state[action.payload.keyName],
goals: [
{ ...state[action.payload.keyName].goals, ...action.payload.goal },
...state[action.payload.keyName].goals.slice(1, state[action.payload.keyName].goals.length)
]
}
};
此外,如果你知道任何好的留档或规范化的教程,请让我知道。
先谢谢你!:)
约翰看起来你以错误的方式描述了你的状态。首先,尝试使用数组分解目标更新您的目标:[{... state[keyName]。目标,...新目标}]
也许这个可能会有用https://redux.js.org/recipes/structuring-reducers/immutable-update-patterns#updating-nested-objects
这将基于其键更新目标
,假设目标具有唯一键。
const state = {
'0': {
id: 0,
dueDate: 'By May 28th I Will have: ',
goals: [
{a: 1,
b: 1,
c: 1}
]
},
'1':{
id: 0,
dueDate: 'By June 31st I Will have: ',
goals: [
{d: 1,
r: 1}
]
}
};
function reducer(state, keyName = 0, goal) {
const goals = [...state[keyName].goals];
const index = state[keyName].goals.findIndex((e) => Object.keys(e).every((key) => Object.keys(goal).includes(key)));
goals.splice(index,1, goal);
return {
...state,
[keyName]: {
...state[keyName],
goals,
}
};
}
console.log(reducer(state, 0, {a:3, b:2, c:4}));
我需要更新嵌套在我的用户文档中的一个字段,该字段包含一个part对象数组,以添加新的part。一个part对象如下所示: 所以这意味着$addToset对我的情况没有好处...现在我不知道该怎么办。
假设我们有以下集合,我对此没有什么问题: > 我想增加“item_name”的价格:“my_item_two”,如果它不存在,应该将它追加到“items”数组中。
我有以下mongodb文档结构: 我已经能够使用$elemMatch来更新操作中的字段,但当我尝试对参数执行相同的操作(修改)时,它似乎不起作用。我想知道,为了能够通过pid查找特定参数中的字段,我应该尝试其他什么方法来成功更新字段。 我目前拥有但不起作用的更新代码如下所示:
我有一个模型看起来是这样的: 我正在使用存储库模式,下面是我的代码片段: 这实际上会引发以下错误: 我目前的做法 当前对我有效的是在更新嵌套对象时使用。然而,这提出了几点考虑: 需要额外的代码来获取整个文档、解析和更新必需的字段 由于在文档级别上工作,因此它还将更新文档中未更改的部分,这并不理想。
问题内容: 我有以下mongodb文件结构: 我已经能够使用$ elemMatch来更新操作中的字段,但是当我尝试对参数执行相同的操作(修改)时,它似乎不起作用。我想知道我应该尝试哪种其他方法,以便能够成功更新特定参数中的字段(通过其pid查找)。 我当前拥有但不起作用的更新代码如下所示: 问题答案: MongoDB 3.6及更高版本 MongoDB3.6及更高版本提供了一项新功能,该功能允许您使
这是我的架构: