节点 - 保存两次后Mongoose推送两次的解决方法

时间:2016-04-24 11:53:25

标签: node.js mongodb mongoose

我想知道解决这个问题的正确方法。我在节点代码中通过mongoose引用一个集合。我有一些修改文档的功能,在每个编辑部分之后我想保存它(由于代码不确定是否需要在代码中的其他地方再次保存)。我可以编写一些非常复杂的代码来确定哪个保存应该是我一直在做的最后一次保存,但它导致代码变得非常复杂,似乎没有什么好理由。

基本上我的代码最终看起来像这样:

collection.attributeArray.push(item);
collection.save();
collection.save();

这导致attributeArray看起来像这样

[item, item]

而不是简单

[item]

有没有一种合理的方法可以在不知道最后一次保存的情况下完成此操作?

2 个答案:

答案 0 :(得分:1)

Mongoose通过注册原子$ pushAll操作跟踪文档数组上的更改。解决方法是做

collection.attributeArray = collection.attributeArray.concat([ item ]);

答案 1 :(得分:0)

如果没有所有代码块,很难看到问题。请添加整个代码块。

但是,我有一个猜测。可能是你的collection.attributeArray.push(item);在一个循环中。将item推两次并保存多次。正如我所提到的,这只是猜测。否则,双重保存不会影响两次添加项目。

在另一个问题中,为什么要使用.save()2次?只需在调用回调(或代码结束)之前使用一次。