sql >> データベース >  >> NoSQL >> MongoDB

Mongodbは、複数のオブジェクトを適切な場所にある配列に永続的に変換します

    3.4で以下の集計パイプラインを試すことができます バージョン。

    以下の集計により、storesが変更されます $ objectToArray 続いて $ map 既存のすべてのフィールドを保持しながら、新しいフィールドで変換された配列を出力します。

    新しい店舗構造を作成するための一括更新。

    var bulk = db.getCollection(col).initializeUnorderedBulkOp();
    var count = 0;
    var batch = 1;
    
    db.getCollection(col).aggregate([
    {"$match":{"store_affiliation.stores":{"$ne":{"$type":4}}}},
    {"$addFields":{
      "stores":{
          "$map":{
            "input":{"$objectToArray": "$store_affiliation.stores"}, 
            "in":{
               "store_code":"$$this.k", 
               "role":"$$this.v.role", 
               "startdate":"$$this.v.startdate", 
               "enddate":"$$this.v.enddate", 
               "permissions":"$$this.v.permissions"
             }
          }
        }
    }}]).forEach(function(doc){ 
        var _id = doc._id; 
        var stores = doc.stores; 
        bulk.find({ "_id" : _id }).updateOne(
          { $set: {"store_affiliation.stores" : stores} }
       ); 
        count++;  
        if (count == batch) { 
            bulk.execute(); 
            bulk = db.getCollection(col).initializeUnorderedBulkOp(); 
            count = 0;
        } 
    });
    
    if (count > 0) { 
        bulk.execute(); 
    }
    



    1. 配列にのみ一意を追加し、更新時にフィールド数を維持します

    2. 非推奨のボディパーサー?

    3. Mongoは、フィールドに基づいてオブジェクトの配列内の重複を削除します

    4. Kubernetes上のMongoDBReplicaSetへの接続