[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.당신은 여전히이를 위해 $ 위치 연산자를 사용할 수 있습니다. 하지만 당신은 _arrayid 필터와 함께 부모 문서의 OBJECTID를 지정해야합니다. 아래의 명령 줄 쿼리는 잘 작동합니다
당신은 여전히이를 위해 $ 위치 연산자를 사용할 수 있습니다. 하지만 당신은 _arrayid 필터와 함께 부모 문서의 OBJECTID를 지정해야합니다. 아래의 명령 줄 쿼리는 잘 작동합니다
db.so.update({_id:ObjectId("4e719eb07f1d878c5cf7333c"), "array._arrayId":ObjectId("dsd87dsa9d87s9d7")}, {$set:{"array.$.someField":"updated"}})
-
==============================
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.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);
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
'MONGODB' 카테고리의 다른 글
[MONGODB] Queryable에서 <T> 다시 IMongoQuery 번역 (0) | 2019.12.23 |
---|---|
[MONGODB] PHP MongoCursor에서 JSON 데이터를 반환하는 방법 (0) | 2019.12.23 |
[MONGODB] MongoDB를, 맵리 듀스 및 정렬 (0) | 2019.12.23 |
[MONGODB] 어떻게 동적으로 몽구스 스키마를 만드는 방법? (0) | 2019.12.23 |
[MONGODB] ID가 아닌 필드와 몽구스 모델을 채 웁니다 (0) | 2019.12.23 |