Как мы можем обновить значение объекта Array в оболочке MongoDB - PullRequest
0 голосов
/ 30 мая 2018

я хочу обновить все мои документы MongoDB, которые содержат ObjectId в моем объекте вложенного массива

мой документ:

{
  "_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", 

}

я хочу обновить все salt.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", 
}

Ответы [ 2 ]

0 голосов
/ 31 мая 2018
**This code is working fine for me.**

db.collectionName.find({}).forEach(function(item){
                    if (item) {
                        item.salts.forEach(function(data){ 
                            if(data){
                                data.id = data.id.valueOf();
                            }
                        })
                        db.collectionName.save(item);
                    }
                })
0 голосов
/ 30 мая 2018

это работает для меня:

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;
    }
  }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...