면책 조항 : 저는 Mongo와 데이터베이스 전반에 대한 멍청한 생각입니다. 따라서 용어 나 개념에 대해 알고 싶으면 알려주십시오.MongoDB 문서의 필드를 원자 적으로 업데이트하는 방법은 무엇입니까?
이 예제에서는 문서 내에 중첩 된 개체 내에 마우스 좌표를 함께 저장하고 싶습니다. 그것은 atomic updating, via modifier operations처럼 보인다
{ "_id" : ObjectId("4f39805d35919a2a7c7aba3e"), "mouseLoc" : { "x" : 10, "y" : 20 } }
, 이동하는 방법이 난 단지 여기에 값을 저장하고있어 같은 (다른 소프트웨어에서 다른 곳을 검색하는)입니다 : 그 문서는 같을 것이다. 그러나 나는 쿼리 부분을 이해할 수 없다. x 및 y 값을 설정하려면이 문서에 어떻게 액세스합니까?
내가 자바를 사용하고, 그래서 현재 노력하고있어 :
BasicDBObject mouseLoc = new BasicDBObject();
mouseLoc.put("x", mouseX);
mouseLoc.put("y", mouseY);
myCollection.update(queryObj, new BasicDBObject("$set", mouseLoc), true, false);
그러나, 나는 queryObj이 mouseLoc 키를 사용하여 문서를 얻기 위해 지정하는 방법을 모르겠어요. 이와 같이 정보를 저장하는 더 똑똑한 방법이 있다면 학교에 보내 주시기 바랍니다.
더 간단하다면 Mongo 셸/JS 팁을 따라갈 수 있습니다.
UPDATE : 나는 그것을 '이름'과 같은 정적 필드를 주면
나는이 문서에 대해 조회 할 수 있습니다. 나는이 코드를 사용할 수 있습니다
{ "_id" : ObjectId("4f39805d35919a2a7c7aba3e"), "name" : "mouseLoc", "mouseLoc" : { "x" : 10, "y" : 20 } }
: 그래서,이 문서를 업데이트 할 수 그러나
BasicDBObject mouseLoc = new BasicDBObject();
mouseLoc.put("x", mouseX);
mouseLoc.put("y", mouseY);
BasicDBObject queryObj = new BasicDBObject("name", "mouseLoc");
BasicDBObject updateObj = new BasicDBObject("$set", new BasicDBObject("mouseLoc", mouseLoc));
myCollection.update(queryObj, updateObj, true, false);
을, "이름"필드 단지로 문서를 검색 할 수 있도록 지정해야하는 중복 보인다 "mouseLoc"키. 어쩌면 내가 데이터베이스/몽고 디자인을 오해 한 것일까?
실제로 ObjectId는 find() 쉘에서 바로 복사됩니다. Java는 아닙니다. 맞아, 그게 내가 어떻게 쿼리 매개 변수를 사용하는거야. 그러나, 그 값에 관계없이 "mouseLoc"키를 사용하여 문서를 검색하고 싶습니다. 데이터베이스 설계를 오해하고 있습니까? "_id"예와 같은 고유 한 이름 - 값 쌍 또는 위의 "name"필드를 사용하는 업데이트가 있어야합니까? – ericsoco
좋아, 이제 너의 요점을 알아 냈어. 내 대답을 업데이트 할게. –
@ericsoco'mouseLoc'에서 어떤 문서를 가져 오려면, 그것을'queryObj'로 만드십시오.그러나, 새로운 X와 Y로 업데이트한다면,'mouseLoc'의'mouseLocBefore' ('queryObj')와'mouseLocAfter' (업데이트 객체)가있을 것이고, 두 개의 동일한 업데이트에서 사용할 수 있습니다 명령 :'myCollection.update (mouseLocBefore, mouseLocAfter, true, false);'. –