Эффективно обновить список курсоров и вставить в коллекцию в Casbah - PullRequest
1 голос
/ 20 марта 2012

Я запрашиваю коллекцию и хочу обновить результаты.

Я хочу обновить поле и оставить остальные поля нетронутыми.

У меня есть записи с "filename" и "projectId "as keys

В этом случае я делаю:

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

updatedFiles.foreach(conn += _)

Однако это медленно.Как мне более эффективно обновить список объектов?

Спасибо!

1 Ответ

1 голос
/ 20 марта 2012

Это то, что я искал:

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

Это обновляет каждую запись, найденную этим запросом.

PS: для будущего ссылка , еслиесть список полей (например, .eg в данном случае имен файлов), вместо использования foreach в этих полях и создания N запросов, можно сделать это:

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