【问题标题】:How to remove a field from a document如何从文档中删除字段
【发布时间】:2013-08-29 08:22:01
【问题描述】:

数据库架构:

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

我想用一个变量删除整个字段result150160:

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

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    正确的语法是这样的:

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

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

    查看relevant docs

    db.collection.update( { field: value1 }, { $unset: { field1: "" } } );
    上面的示例从字段值为 value1 的文档中删除集合中的 field1。 $unset 语句中的字段值(即上面的“”)不影响操作。

    【讨论】:

    • 几分钟前我已经测试了你的语法,但它也不起作用
    • 这是使用正确的语法 - 您可以从我包含的文档的链接中看到。您确定问题不在代码中的其他地方吗? Box 实际上是指一个集合吗? _id 属性是否正确?
    • @sebastian 您是否尝试过在流星 mongo 控制台中运行该命令。如果它有效,那么你的代码被破坏了。
    • 截至今天,这个问题似乎在 Meteor 中仍然存在。我在我的代码中尝试了 $unset 并且没有工作。我必须使用更新将字段更改为 false,这在我的情况下与取消设置字段相同,并且有效。
    【解决方案2】:

    你可以这样做:

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

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

    【讨论】:

    • 那行不通,我不想要查询中的字符串,因为 result150160 是一个示例,也可能是另一个字符串 :)
    • 我稍微修改了语法,你可以使用任何字符串。另请检查您的 javascript 控制台,因为它也可能是其他原因导致它无法工作(.allow 权限或没有正确使用 _id
    【解决方案3】:

    试试这个它应该适合你:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-14
      • 2020-11-21
      相关资源
      最近更新 更多