2010-12-20 108 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