2012-03-20 54 views
1

我正在查詢集合,我想更新結果。高效更新光標列表並插入Casbah中的集合

我想更新一個字段,並讓其餘字段不變。

我有「名」和「專案編號」作爲鍵

在這種情況下條目我做:

val olderFiles = conn.find(query ++ ("filename" -> filename) ++ ("projectId" -> file.projectId)) 
val updatedFiles = olderFiles.map{cursor => 
      cursor.put("newField",field) 
      cursor 
      } 

updatedFiles.foreach(conn += _) 

然而,這是緩慢的。 如何以更高效的方式更新對象列表?

謝謝!

回答

1

這就是我一直在尋找:

conn.update(query ++ ("filename" -> filename) ++ ("projectId" -> projectId),$set ("field" -> field),false,true) 

此更新通過該查詢找到的每個條目。

PS:對於未來reference,如果有域(.e.g在這種情況下的文件名),而不是在這些領域使用foreach和創建N次查詢的列表,可以這樣做:

"filename" $in Array(fieldList:_*)