2011-06-13 3 views
5

업데이트 수정 의미는 다음 업데이트 수정 해제 작품과 같이

는 수집 사용자와 몽고 DB 데이터베이스 데시벨을 고려하십시오. 사용자는 다음과 같은 형식으로, 문서를 포함 :

>db.users.update({"username":"joe"},{"$unset":{"relationships.terminated": "many"}}); 

내 질문은 :

//Document for a user with username: joe 
{ 
    "_id" : ObjectId("4df5b9cf9f9a92b1584fff16"), 
    "relationships" : { 
      "enemies" : 2, 
      "friends" : 33, 
      "terminated" : "many" 
    }, 
    "username" : "joe" 
} 

나는 종료 키를 제거 할 경우에, 나는 다음과 같이 $ 해제 업데이트 수정자를 지정해야 왜 대신 단순히 지정하는, 내가 설정 해제 $ 작동하기위한 관한 모든 키의 값 쌍을 지정해야 할 :

>db.users.update({"username":"joe"},{"$unset":{"relationships.terminated"}}); 

Mon Jun 13 13:25:57 SyntaxError: missing : after property id (shell):1 
,

왜 안 되니?

편집 : 해제 $의 방법은 JSON 사양에 따라, 전체 키 값 쌍을 지정하거나, 이유를 할 수있는 '문에 값으로 "1"을 추가하는 경우

쉘이 "1"치환 자체를 수행? 그런 기능이 제공되지 않는 이유는 무엇입니까? 그러한 지원을 제공하는 함정이 있습니까?

답변

25

짧은 답변은 {"relationships.terminated"}이 유효한 json/bson 개체가 아니기 때문입니다. JSON 객체는 키와 값으로 구성되며 {"relationships.terminated"}은 키 (또는 값, 사용자의 모양에 따라 다름) 만 있습니다.

어쨌든 Mongo에서 필드를 설정 해제하려면 제거 할 필드의 실제 값을 설정할 필요가 없습니다.

db.users.update({"username":"joe"},{"$unset":{"relationships.terminated" : 1}}); 
+0

덕분에, 즉 – DhruvPathak

+0

왜'db.users.update ({ "사용자 이름"도움이된다 : "조 당신은 어떤 값 (1 일반적으로 몽고의 문서에 사용되는)에 상관없이 relationships.terminated의 실제 값을 사용할 수 있습니다 "}, {"$ unset ": ["relationships.terminated "]}))'? –