2017-03-27 5 views
1

に1つのENUMタイプからの変更値が、私はこのようになりますMongoDBのエントリを持っている:MongoDBの別の

{ 
"_id" : ObjectId("57288862e4b05f37bc6ab91b"), 
"_class" : "mydomain.ScheduleAbsenceContainer", 
"containerStart" : ISODate("2016-04-06T07:30:00Z"), 
"containerEnd" : ISODate("2016-04-06T10:00:00Z"), 
"scheduleIntervalContainerAbsenceType" : "SCHOOL", 
"scheduleIntervalContainers" : [ 
    { 
     "_id" : null, 
     "marker" : 6,   
     "containerType" : "SCHOOL",   
    } 
    ] 
} 

と私はまた、SPARE_TIME、すべてのcontainerTypeにSCHOOLからすべてのscheduleIntervalContainerAbsenceTypeを変更しますは、からSCHOOL~SPARE_TIMEです。 これを実行する簡単な方法はありますか?

+0

の可能性のある重複[MongoDBの - ネストされた配列内のオブジェクトを更新し(http://stackoverflow.com/questions/34431435/mongodb-update-an-object-in-nested-array) – felix

答えて

0

以下のコードは、あなたが望むことをします。これは "scheduleIntervalContainerAbsenceType"キーの "SCHOOL"値を持つすべての文書を更新します。

db.collection_name.find({"scheduleIntervalContainerAbsenceType" : "SCHOOL"}) 
    .forEach(function (doc) { 
    doc.scheduleIntervalContainers.forEach(function (sch) { 
     if (sch.containerType === "SCHOOL") { 
     sch.containerType="SPARE_TIME"; 
     } 
    }); 
    doc.scheduleIntervalContainerAbsenceType="SPARE_TIME"; 
    db.collection_name.save(doc); 
    }); 

あなたが「scheduleIntervalContainerAbsenceType」の値をチェックせずにすべての文書を更新したい場合は(まだ「SPARE_TIME」にそれを更新する)そのようなあなたのクエリを変更します。

db.collection_name.find({}) 
    .forEach(function (doc) { 
    doc.scheduleIntervalContainers.forEach(function (sch) { 
     if (sch.containerType === "SCHOOL") { 
     sch.containerType="SPARE_TIME"; 
     } 
    }); 
doc.scheduleIntervalContainerAbsenceType="SPARE_TIME"; 
    db.collection_name.save(doc); 
    });