【问题标题】:Update if value not undefined - mongoose如果值未定义则更新 - 猫鼬
【发布时间】:2020-08-19 13:25:23
【问题描述】:

如果有效负载中的键应该具有某个值(不是未定义或任何错误值),我想更新该值。我不想检查每个使代码冗长的值。

await Parent.findByIdAndUpdate(
    payload.TID,
    {
      healthTests: payload.foo,
      otherHealthtest: payload.bar,
    },
    { new: true, fields: { updatedAt: 0, createdAt: 0, __v: 0 } },
  );

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您可以使用Object.entires() 来迭代键和值并构建您的updateObj

    let updateObj = {};
    
    for(let [key, value] of Object.entries(payload)){
        if(value !== undefined){
            updateObj[key] = value;
        }
    }
    
    await Parent.findByIdAndUpdate(
        payload.TID, updateObj,
        { new: true, fields: { updatedAt: 0, createdAt: 0, __v: 0 } },
    );
    

    示例:

    let payload = { foo: 1, bar: undefined, baz: 3};
    let updateObj = {};
    
    for(let [key, value] of Object.entries(payload)){
        if(value !== undefined){
            updateObj[key] = value;
        }
    }
    
    console.log(updateObj);

    【讨论】:

    • 我认为你没有明白我的意思。我想仅在有效负载对该键具有某些值的情况下才更新该值。我不在乎它是否已经存在。
    • 这取决于你所说的“一些价值”,你可以很容易地用healthTests: { $ne: null }或类似的东西替换条件,你能举一些例子吗?
    • 假设,如果请求 payload.foo = "xyz" 在这种情况下我想更新 healthTests 但如果 payload.foo 未定义(或者有效载荷中没有类似的键)我不想更新 @ 987654329@.
    • @imrvasishtha 抱歉,误解了您的问题,请参阅我修改后的答案
    猜你喜欢
    • 1970-01-01
    • 2022-07-23
    • 2018-10-20
    • 2019-01-23
    • 2019-08-20
    • 1970-01-01
    • 2023-03-15
    • 2012-03-28
    • 2018-02-05
    相关资源
    最近更新 更多