2012-08-28 122 views
6

我從RETS(XML)提要中提取數據,並使用節點和貓鼬將其保存在本地MongoDB中。使用Mongoose批量更新

定期我需要更新文檔並刪除不活動的以及添加新的。我並沒有向Mongo或RETS服務器進行多重查詢,而是拉着它們並循環訪問這些數據。

這工作正常,但有沒有辦法將Mongoose結果保存到數據庫更新和插入?或者我需要查找每個文檔並單獨更新它?

回答

11

要使用貓鼬有關MongoDB更新多個文件(而不僅僅是一個),你可以使用選項:

Model.update({ 
    field_that_matches_many_docs: ninja_variable 
}, { 
    $set: { size: 'large' } 
}, { 
    multi: true 
}, callback); 

updating documents查看更多關於貓鼬文檔和here

+0

但我會做幾百甚至千的文件。這樣批量更新可能嗎? – jabbermonkey

+0

是的,你可以放置'{multi:true}'選項。如[描述](http://mongoosejs.com/docs/api.html#model_Model-update) –

+0

謝謝。我想我可以完成這項工作。 – jabbermonkey

0

爲了完整如果任何一個人有多個查詢條件並且想爲每個查詢條件的匹配文檔添加新的字段,那麼我們可以使用

var bulk = Person.collection.initializeUnorderedBulkOp(); 
    bulk.find(query1).update(update1); 
    bulk.find(query2).update(update2); 
    bulk.execute(callback); 

在以下文件據說db.collection.initializeUnorderedBulkOp()

初始化並返回一個新的大容量()操作建設者一個 集合。構建器構造一個MongoDB批量執行的寫入操作的無序列表。 MongoDB在 中並行執行列表中的寫操作。

https://docs.mongodb.org/v3.0/reference/method/db.collection.initializeUnorderedBulkOp/