我有一個蒙戈文件看起來像這樣:我的流星幫手部分更新蒙戈對象
{
"_id" : "cfqjJW8WZprDSJEop",
"rName" : "z1",
"pName" : "P-4",
"ipAddress" : "21.1.1.12",
"misc" : {
"createdBy" : "admin",
"updatedBy" : "admin",
"creationTime" : ISODate("2016-09-15T09:43:10.953Z"),
"updatedTime" : ISODate("2016-09-15T09:43:10.953Z")
}
}
我已經寫代碼,這樣每次更新過程中,只有updatedBy
和updatedTime
應該被推到mongo文件。
misc對象是在插入/更新之前添加的東西。
我遇到麻煩時,我嘗試使用更新的記錄:
doc // contains the update document being generated.
misc = {};
misc.updatedBy = //some name
misc.updatedTime = new Date();
doc.misc = misc,
r.update(id,doc); // calling meteor update
然而,當更新發生的,正在發生的事情是,查詢被完全替換記錄中的其它對象(即包含createdBy和creationTime)與我已經通過。我最終失去了creationTime和createdBy字段。
如何部分更新對象?
由於我的文檔對象最初不包含其它對象,我也嘗試過的東西注入,如:
doc.$set.misc.updatedBy
但出現了錯誤,指出updatedBy不存在。更新文檔中的部分對象的正確方法是什麼?
雖然我昨天又看了這個,我注意到$ set是設置整個對象。我所做的是首先獲取記錄的對象數據,然後引入那些未設置的對象屬性,手動將它們添加到$ set,然後更新文檔。額外5行代碼,但完成這項工作! – blueren
@blueren是的,但額外的數據庫查找操作可能會非常昂貴,具體取決於情況。 –
從我讀到的,流星中的additioanal查找操作發生在已存在於客戶端的minimongo實例中。所以它不應該是太多的性能影響。 – blueren