복붙노트

[MONGODB] 어떻게하여 MongoDB에서 특정 문서의 배열 내에서 특정 포함 된 문서의 값을 업데이트하는?

MONGODB

어떻게하여 MongoDB에서 특정 문서의 배열 내에서 특정 포함 된 문서의 값을 업데이트하는?

내 문서의 구조는 다음과 같습니다

{
  _id : ObjectId("43jh4j343j4j"), 
  array : [
            { 
              _arrayId : ObjectId("dsd87dsa9d87s9d7"),
              someField : "something",
              someField2 : "something2"
            },
            { 
              _arrayId : ObjectId("sds9a0d9da0d9sa0"),
              someField : "somethingElse",
              someField2 : "somethingElse2"
            }
   ]
 }

나는하지만 배열의 항목 중 하나 (예 : _arrayId _arrayId 일치하는 하나 someField 및 someField2을 업데이트 할 : ObjectId가 ( "dsd87dsa9d87s9d7"); 만이 문서 (예 : _id : ObjectId가 ( "43jh4j343j4j")) 그리고 다른.

arrayIds 내가 특정 문서에 대한 될 필요 이유 문서에 고유하지 않습니다. 나는 그것이에 존재하는 모든 문서의 배열 내에서 그 값을 업데이트하기를 원한다면 나는 $ 위치 연산자를 사용할 수 있습니다,하지만 그건 내가 원하는 게 아니에요.

나는 자바에서 이러한 목표를 달성하기 위해 노력하고 있지만, 명령 줄 솔루션뿐만 아니라 작동합니다.

해결법

  1. ==============================

    1.당신은 여전히이를 위해 $ 위치 연산자를 사용할 수 있습니다. 하지만 당신은 _arrayid 필터와 함께 부모 문서의 OBJECTID를 지정해야합니다. 아래의 명령 줄 쿼리는 잘 작동합니다

    당신은 여전히이를 위해 $ 위치 연산자를 사용할 수 있습니다. 하지만 당신은 _arrayid 필터와 함께 부모 문서의 OBJECTID를 지정해야합니다. 아래의 명령 줄 쿼리는 잘 작동합니다

    db.so.update({_id:ObjectId("4e719eb07f1d878c5cf7333c"),
                  "array._arrayId":ObjectId("dsd87dsa9d87s9d7")},
                  {$set:{"array.$.someField":"updated"}})
    
  2. ==============================

    2.여기에 자바로 번역 RameshVel의 솔루션입니다 :

    여기에 자바로 번역 RameshVel의 솔루션입니다 :

        DB db = conn.getDB( "yourDB" ); 
        DBCollection coll = db.getCollection( "yourCollection" );
    
        ObjectId _id = new ObjectId("4e71b07ff391f2b283be2f95");
        ObjectId arrayId = new ObjectId("4e639a918dca838d4575979c");
    
        BasicDBObject query = new BasicDBObject();
        query.put("_id", _id);
        query.put("array._arrayId", arrayId);
    
        BasicDBObject data = new BasicDBObject();
        data.put("array.$.someField", "updated");
    
        BasicDBObject command = new BasicDBObject();
        command.put("$set", data);
    
        coll.update(query, command);
    
  3. ==============================

    3.... 그리고이 몽고 드라이버 버전으로 작업을 수행하는 방법이다> = 3.1 (광산은 3.2.2이다) :

    ... 그리고이 몽고 드라이버 버전으로 작업을 수행하는 방법이다> = 3.1 (광산은 3.2.2이다) :

    final MongoClient mongoClient = new MongoClient(new MongoClientURI(mongoURIString));
    final MongoDatabase blogDatabase = mongoClient.getDatabase("yourDB");
    MongoCollection<Document> postsCollection = blogDatabase.getCollection("yourCollection");
    
    ObjectId _id = new ObjectId("4e71b07ff391f2b283be2f95");
    ObjectId arrayId = new ObjectId("4e639a918dca838d4575979c");
    
    Bson filter = Filters.and(Filters.eq( "_id", id ), Filters.eq("array._arrayId", arrayId));
    Bson setUpdate = Updates.set("array.$.someField", "updated");
    postsCollection.updateOne(postFilter, setUpdate);
    
  4. from https://stackoverflow.com/questions/7425993/how-to-update-value-of-specific-embedded-document-inside-an-array-of-a-specifi by cc-by-sa and MIT license