真的很难很快提出我的问题,但这是矩阵在数据库中的位置 (矩阵可以具有任意数量的列/行,并且可以有多个花园):
{
UserId: 5,
Gardens : [
{
Name: "gardenName",
Plants : [[Array][Array]]
}
]
}
矩阵中的对象如下: {field1:val1,field2:val2,...}
如何使用nodejs / mongodb更新Plants矩阵中的元素的field1? 我已经看到了类似问题的解决方案,但是它们都不包括这样的矩阵,仅包括使用运算符$,$ []等的数组。但是我在这里看不到这样做的方法。
答案 0 :(得分:0)
好吧,我发现一种解决方案不需要两个集合(一个用于矩阵,另一个用于用户),而不仅仅是MongoDB,因为它取决于前端向其发送矩阵的先前版本。
它是这样的:
let user = req.session.user;
let name = req.body.name;
let gardenMat = req.body.garden;
let i = parseInt(req.body.x);
let j = parseInt(req.body.y);
gardenMat[i][j].state = newState;
db.collection('users').findOneAndUpdate(
{username : user},
{$set : {"garden.$[element].garden" : gardenMat}},
{arrayFilters : [{"element.name" : {$eq : name}}]}
);
因此,前端发送正在显示的整个矩阵,这样我们就可以得到旧版本的矩阵。然后,我们更新某些字段(1个或更多),并简单地使用 findOneAndUpdate 来更新文档中的矩阵字段。
我认为具有两个集合的版本更简单,因为它不依赖于前端。