2013-08-29 209 views
6

数据库模式:如何从文档中删除字段

{ 
    _id: "kun2", 
    result150160: [10,20,30]; 
    moon: 4 
} 

我想通过客户端具有可变删除整场result150160:

var deleteresult = "result150160" 
Box.update({_id: this._id} , {$unset: { deleteresult } }); 

回答

1

你可以这样做:

var deleteresult = {}; 
deleteresult["result150160"] = true 
Box.update({_id: this._id} , {$unset: deleteresult }); 

基本上,你必须使用一个关键值对,它并不重要你用什么true,只要有东西在那里。

+0

这不工作,我不希望在查询字符串,因为result150160是一个例子,也可以是另一个字符串:) – Sebastian

+0

我稍微修改了语法,你可以使用任何字符串。请检查您的JavaScript控制台,因为它也可能是导致它无法正常工作的其他东西('.allow'权限或没有正确使用'_id') – Akshat

12

正确的语法是这样的:

Box.update({_id: this._id} , {$unset: { deleteresult : "" } }); 

你必须指定$unset操作的值:{ deleteresult : "" }。即使它是空的。

结帐的relevant docs

db.collection.update({ field: value1 }, { $unset: { field1: "" } });
上面的例子中删除从那里字段具有值1的值的文件集合FIELD1。 $ unset语句中字段的值(即上面的“”)不影响操作。

+0

我已经在几分钟前测试过您的语法,但它没有' t工作也 – Sebastian

+0

这是使用正确的语法 - 你可以看到从链接到我包括的文档。你确定这些问题不在你的代码中的其他地方吗? “盒子”实际上是指集合吗? _id'属性是否正确? – Lix

+0

@sebastian你有没有试过在meteor mongo控制台上运行命令。如果它有效,那么它就是破解的代码。 – booyaa

1

试试这个它应该为你工作:

var deleteresult = "result150160";  
var updateQuery={$unset:{}}; 
updateQuery.$unset[deleteresult]=1; 
Box.update({_id: this._id} ,updateQuery,false,true);