簡體   English   中英

Mongodb 向嵌套對象插入動態唯一鍵,如果不存在則添加否則更新

[英]Mongodb Insert dynamic unique keys to nested object add if not exist else update

我需要操作與 $addtoset 對 mongodb 中的數組的工作方式相同的操作,但對於對象,我將動態生成的對象添加到對象中。 動態鍵基於一個字符串,該字符串將有助於保持唯一值,因此不會使用相同的動態鍵插入另一個鍵。

我試過 $set 實際更新

const update = { 
    $set: { 
      'resources.defs.icons': {
        [md5(iconURL)]: {
          persist: persist,
          iconURL: iconURL,
          iconName: _.get(iconData, 'iconName')
        }
      }
    }
  };

這是我更喜歡的結果

 "resources": {
  "defs": {
    "icons": {
      "c1b79846875970da7ee9cc5b1f9cc4ad": {
        "persist": true,
        "iconURL": "URL",
        "iconName": ""
      }
    },
    {
      "28b569d3f9a3e63f94ca6fad969475f9": {
        "persist": true,
        "iconURL": "imageUrl",
        "iconName": ""
      }
    }
  }
}

如果對象鍵存在則更新,如果不存在則插入新鍵。 這就是我為數組實現的方式,

 const update = { 
    $addToSet: { 
      'resources.defs.icons': {
        [md5(iconURL)]: {
          persist: persist,
          iconURL: iconURL,
          iconName: _.get(iconData, 'iconName')
        }
      }
    }
  };

現在我需要你的幫助來實現這個目標。 謝謝!

您非常接近解決方案,只需要進行一些更改:

const update = { 
  $set: { 
    [`resources.defs.icons.${md5(iconURL)}`]: {
      persist: persist,
      iconURL: iconURL,
      iconName: _.get(iconData, 'iconName')
    }
  }
};

我找到了這個解決方案,

 const dynamicResourcePath = `resources.defs.icons.${md5(iconURL)}`;
  const update = {
    $set: { 
      [dynamicResourcePath]: {
          persist: persist,
          iconURL: iconURL,
          iconName: _.get(iconData, 'iconName')
      }
    }
  };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM