2010-12-20 204 views
52

我使用Mongoose圖書館與node.js的刪除使用貓鼬

訪問MongoDB的一個MongoDB的文檔的關鍵是有沒有辦法刪除文檔的關鍵?即不是僅將該值設置爲空,而是將其刪除?

User.findOne({}, function(err, user){ 
    //correctly sets the key to null... but it's still present in the document 
    user.key_to_delete = null; 

    // doesn't seem to have any effect 
    delete user.key_to_delete; 

    user.save(); 
}); 
+1

我想我已經找到了,但一些測試後:可能不會。儘管如此,這個主題還是有一些很好的討論。 http://groups.google.com/group/mongoose-orm/browse_thread/thread/6053e3b8d4fe9098 – Stephen 2011-08-15 15:28:52

+0

大聲笑沒關係,我想這是你的帖子! – Stephen 2011-08-15 15:31:33

+0

其實它是我的:) – staackuser2 2011-08-22 22:26:03

回答

99

在早期版本中,你會需要打開下拉節點MongoDB的原生驅動程序。每個模型都有一個集合對象,其中包含node-mongodb-native提供的所有方法。所以,你可以做這個問題的動作:

User.collection.update({_id: user._id}, {$unset: {field: 1 }}); 

由於2.0版本,你可以這樣做:

User.update({_id: user._id}, {$unset: {field: 1 }}, callback); 

而且,由於2.4版本,如果你有一個模型的實例已經可以這樣做:

doc.field = undefined; 
doc.save(callback); 
+0

這已在Mongoose 2.X中修復,因此您可以將該集合退出。 – staackuser2 2011-11-13 22:30:57

+0

什麼是修復?如何做到這一點。我已閱讀我擁有的文檔。 – grantwparks 2012-04-02 00:31:58

+4

或者使用'User.update({_id:id},{$ unset:{field:1}},callback)'或者如果您有一個文檔實例,請將路徑設置爲undefined並保存:doc.field =未定義; doc.save()' – aaronheckmann 2012-08-21 21:31:02

5

在蒙戈語法來刪除一些關鍵的,你需要做以下幾點:

{ $unset : { field : 1} } 

似乎在貓鼬一樣。

編輯

檢查this例子。

+0

你能澄清這個答案,並給出一個代碼示例,涉及到上面的示例代碼? – 2011-01-04 22:55:59

+0

對不起,但我不是貓鼬。上面的語法是mongo語法,所以我想任何語言的驅動程序都支持這種語法。我找到了一些例子,在我的答案中查看。 – 2011-01-04 23:34:15

+0

真棒就像一個魅力:) – 2016-10-06 18:41:31

1

難道這是像使用

function (user) 

代替

function(err, user) 

對發現的回調端問題?只是試圖幫助,因爲我已經有了這種情況。

34

你要做到這一點:

User.findOne({}, function(err, user){ 
    user.key_to_delete = undefined; 
    user.save(); 
}); 
+3

這將只是將其設置爲空 - 不是什麼OP要求。 – 2011-06-30 20:34:57

+16

從版本2.4.0開始,將文檔鍵設置爲undefined會將$ unset傳遞給mongodb http://aaronheckmann.posterous。com/mongoose-240 – 2012-04-06 23:49:27

+0

已確認。這在2.6.7中起作用。 – superluminary 2015-06-26 16:33:54

13

我使用貓鼬和使用任何上述功能做了我的要求。該函數編譯錯誤免費,但該字段仍然會保留。

user.set('key_to_delete', undefined, {strict: false}); 

爲我做了詭計。

+0

Upvoting這個有用的答案,太糟糕了@亞歷山大鏈接並沒有使它成爲2015年的答案(http://stackoverflow.com/questions/4486926/delete-a-key-from-a-mongodb-document-using -mongoose#comment50381329_6938733) – w00t 2016-10-10 13:36:12

-1

可以使用 刪除user._doc.key