2013-08-21 66 views
3

我在這裏看一下例子文檔#更新的貓鼬:如何在Mongoose中使用Document#更新?

http://mongoosejs.com/docs/api.html#document_Document-update

方法簽名:

文檔#更新(DOC,期權,回調)

示例代碼:

weirdCar.update({$ inc:{wheels:1}},{w:1},callback);

該文件說第一個參數應該是「doc」,但是doc究竟是什麼?我會想象文檔應該只是一個對象,將鍵映射到要更新的新值(默認情況下使用$ set)。在代碼示例中,它們嘗試將輪子加1。

然後在示例中它們將{w:1}作爲選項傳遞,但根據Model.Update,「w」不是有效的選項。唯一有效的選項應該是:安全,插入,多重,嚴格。

http://mongoosejs.com/docs/api.html#model_Model.update

有人能解釋由貓鼬提供的示例代碼?

回答

1

Mongoose API基於底層的MongoDB查詢結構。在這種情況下,「doc」是指匹配您想要更新的某些文檔的標準。 MongoDB的文檔很清楚地說明這一點: http://docs.mongodb.org/manual/core/write-operations/#update

所以,讓我們說,你有一個「汽車」集合,你想發現了3輪的所有文件(全車),並增加該值,使那些車有4個輪子。在這種情況下,「doc」是{wheels:3},它返回集合中的所有三輪車。這裏是MongoDB的外殼基本查詢:

> db.cars.update({ wheels : 3 }, { $inc : { wheels : 1 } }); 

在貓鼬,你可以添加選項和一個回調函數的附加參數,但是這是基本的想法。

+0

我認爲這相當於http://mongoosejs.com/docs/api.html#model_Model.update而不是http:// mongoosejs。 com/docs/api.html#document_Document-update –

1

對我來說關鍵是正確的參數。您需要提供參數callback或致電.exec()以使其運行。

var Product = mongoose.model('product', mongoose.Schema({ 
    name: String 
})); 
Product.findById('539dceccc61fa4950b43423a', function (err, product) { 
    product.update({ name: 'test' }, null, function(err, numberAffected, raw) { }); 
    //or 
    product.update({ name: 'test' }).exec(); 
}); 
+0

這真的很有幫助。浪費了很多時間,因爲我忘了執行部分。 –

1

在我看來,像文件是錯誤的。

此外,有些人不明白這裏的問題。我們正嘗試在文檔上撥打update。在執行更新時不要查詢文檔。有一個區別,並且它不是很好的被貓鼬記錄。

這裏是什麼文件說:約document.update

例如:weirdCar.update({$inc: {wheels:1}}, { w: 1 }, callback);

參數: doc <Object> options <Object> callback <Function>

有效選項 same as in Model.update

所以讓我們來看看Model.updates選項 ...

Model.updates選項:

  • 安全(布爾)安全模式(默認爲模式設定值(true) )
  • UPSERT(布爾)是否創建文檔,如果它不匹配(假)
  • 多(布爾)多個文件是否應更新(假)
  • runValidators:如果爲true,則在此命令上運行update驗證程序。更新驗證器根據模型的模式驗證更新操作。
  • setDefaultsOnInsert:如果this和upsert爲true,如果創建了新文檔,mongoose將應用模型模式中指定的默認值。該選項僅適用於MongoDB> = 2.4,因爲它依賴於MongoDB的$ setOnInsert運算符。
  • 嚴格(布爾)覆蓋此更新strict選項
  • 覆蓋(布爾)禁用更新-only模式,讓您覆蓋DOC(假)

沒有什麼那裏,與實例對應... {w : 1}是這裏的錯誤。忽略那部分。

但是,您可以在有或沒有這些選項的情況下使用它。

所以它看起來像這樣不帶任何選項
weirdCar.update({$inc: {wheels:1}}, function(err, updated) { // 'updated' is the object: {ok: number, nModified: number, n: number} })

+0

有沒有什麼辦法可以讓我們在回調中獲得更新的文檔?我想在文檔中推送一個新對象,並希望在回調中返回該對象 – AnkitNeo

相關問題