首页 > 解决方案 > 我们如何在 MongoDB shell 中更新数组对象值

问题描述

我想更新嵌套数组对象中包含 ObjectId 的所有 MongoDB 文档

我的文档是:

{
  "_id" : ObjectId("5a61a6bdae8bdc26685f8c27"), 
  "variant_count" : 1, 
  "salts" : [
    {
        "name" : "Cetirizine", 
        "classification" : "HD", 
        "dosage" : 0.0, 
        "is_cold_storage" : false, 
        "id" : ObjectId("5a61a292ae8bdc26685f2a91")
    }]
  "drug_category" : "DRUGS", 
  "name" : "Adicold Tab", 

}

我想将所有 salts.id 更新为字符串,

例如。

{
  "_id" : ObjectId("5a61a6bdae8bdc26685f8c27"), 
  "variant_count" : 1, 
  "salts" : [
    {
        "name" : "Cetirizine", 
        "classification" : "HD", 
        "dosage" : 0.0, 
        "is_cold_storage" : false, 
        "id" : "5a61a292ae8bdc26685f2a91"
    }]
  "drug_category" : "DRUGS", 
  "name" : "Adicold Tab", 
}

标签: mongodbmongodb-query

解决方案


这对我有用:

db.product.find({"salts.id" : {$type : 7}}).forEach(
    function(doc) {
    var salts = doc.salts;
    var newSalts = [];
    if (Array.isArray(salts) && salts.length > 0) {
      for (i = 0; i < salts.length; i++) { 
        salt = salts[i];
        if (salt['id'] != null && typeof salt['id'] == 'object') {
            salt['id'] = salt['id'].str
            newSalts.push(salt)
        } else {
          newSalts.push(salt)
        }
      } 
      db.product.update( { _id: doc._id }, { $set: { salts: newSalts } } 
     );
      i = i + 1;
    }
  }
);

推荐阅读