【问题标题】:How to Delete Item from Object in NodeJS/Mongo Service如何从 NodeJS/Mongo 服务中的对象中删除项目
【发布时间】:2019-07-04 19:51:08
【问题描述】:

我正在查询一个用户对象,并与传入的 postdata (jsObject) 相比,对其中的项目执行一系列更新。我想知道如何从对象中完全删除一个项目......特别是一个 Date 对象(user[0].birthDate)......在我保存更新的用户对象之前。

orm.User.find({ appId: appId, facebookUsername:usersFBUsername}).exec(function (error, user) {
        if (error) {
            console.log('Error in User Query: ' + error);
        }
        else if(Object.keys(user).length > 0) {

            if(jsObject.name != null)
                user[0].name = jsObject.name;

            if(jsObject.email != null)
                user[0].emailAddress = jsObject.email;

            if(jsObject.birthDate != null && jsObject.birthDate.length > 0) {
                user[0].birthDate = jsObject.birthDate;
            }
            else {
                console.log('delete it');
                //orm.User.update({_id:user._id}, {$pull:{birthDate:1}});
                //delete user[0].birthDate;
            }               
        }

        user[0].save(function (error) {
                if (error != null) {
                    console.log('An error has occurred while saving user:' + error);
                    response.end(results.getResultsJSON(results.ERROR, error));
                }
                else {
                    console.log('    [User Successfully Updated]');
                    response.end('{ "success": ' + JSON.stringify(user[0]) + ' }');
                }
            });
       });

您可以在注释代码中看到我所做的一些尝试,但都没有成功。我什至在保存完成后尝试了一下,但也没有用:

orm.User.update({appId: appId, facebookUsername:usersFBUsername},{$pull:{birthDate:deleteBirthDate}})
                .exec(function(error){
                    if(error) {
                        console.log('oh well: ' + error);
                    }
                    else {
                        console.log('maybe maybe');
                    }
                });

感谢任何建议。

克里斯

【问题讨论】:

  • delete(field.attribute) 将删除属性字段及其值
  • @AsyaKamsky:不幸的是,这不起作用(可能是因为我使用的是 Mongoose?)。
  • 我原以为您正在取回完整的对象并想从 json 文档中删除该字段。如果您在进行更新时尝试取消设置,则以下答案是正确的。
  • 没问题。我不是说你错了,只是这不适用于我需要的结果。感谢您的意见。

标签: javascript node.js mongodb mongoose


【解决方案1】:

$pull 用于从数组中删除值,但您可以使用$unset

orm.User.update(
  {_id     : user._id},
  { $unset : { birthDate : 1 }},
  function(err, numAffected) { 
    ...
  }
);

供参考:

https://docs.mongodb.com/manual/reference/operator/update/unset/

【讨论】:

    猜你喜欢
    • 2019-01-29
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    相关资源
    最近更新 更多