2016-04-24 23 views
0

我想知道解決此問題的正確方法。我在節點代碼中通過貓鼬引用了一個集合。我有一些修改文檔的功能,並且在我想保存它的每一段編輯之後(由於代碼不確定它是否需要再次保存在代碼中的其他地方)。我可以寫一些非常複雜的代碼來確定哪個保存應該是我一直在做的最後一次保存,但是它導致代碼變得非常複雜,看起來沒有什麼好理由。節點 - 解決方法Mongoose在保存兩次後推送兩次

基本上我的代碼最終看起來像這樣:

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

這導致attributeArray看起來像這樣

[item, item] 

,而不是簡單地

[item] 

是否有一個合理的方式在不知道哪一個節省將是你最終的節省的情況下完成這個?

回答

1

Mongoose通過註冊原子$ pushAll操作來推送文檔數組上的更改。一個解決方法是這樣做

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

謝謝你的答案,我相信這是解決這個問題的最好方法。 –

0

如果沒有全部代碼塊,很難看到問題。請添加您的整個代碼塊。

但是,我有一個猜測。可能,你的collection.attributeArray.push(item);在一個循環。推動item兩次,它可以節省多次。正如我所提到的,這只是猜測。否則,重複保存不會影響添加項目兩次。

在另一個問題中,爲什麼要使用.save()2次?在調用回調函數(或代碼結束)之前只需使用一次。