2014-02-05 4 views
6

하나의 문서 내에 (mongodb) 임베디드 문서 목록이 있으며 기존 임포트 목록에 새 임베디드 문서를 추가하고 싶습니다.

필자가 조사한 한 $ addToSet을 사용할 수 있는데, 알아낼 수없는 것은 MongoDB가 새 문서가 이미 임베디드 문서 목록에 있는지 또는 새 문서인지 여부를 어떻게 결정하는지입니다 MongoDB는 2 개의 임베디드 문서가 같은지 결정합니까?

p.s. 내가 가지고있는 임베디드 문서는 가치가 아니라 매우 복잡한 구조이므로 두 가지 사이의 평등이 무엇을 의미하는지 정의 할 수있는 곳이 있는지 궁금 해서요 ...

답변

9

$addToSet은 일반적으로 mongodb equality rules을 사용합니다. 사람들은 (페어)없는 동안

{ name: "John", hobbies: ["coding", "drinking", "chess"] } 
{ hobbies: ["coding", "drinking", "chess"], name: "John" } 

(문서 is not guaranteed 내에서 순서, 그래서 그들은 동일) : 다음 두 문서가 동일하므로, 깊은 가치에 의한 값 비교를 할 것입니다 :

// compare to: 
{ name: "John", hobbies: ["chess", "coding", "drinking"] } 

// in arrays, the order matters: 
{ name: "John", hobbies: ["coding", "drinking", "chess"] } 

// field names and values are case sensitive 
{ Name: "John", hobbies: ["chess", "coding", "drinking"] } 
{ name: "john", hobbies: ["chess", "coding", "drinking"] } 

// additional field: 
{ name: "John", lastName: "Doe", hobbies: ["chess", "coding", "drinking"] } 

// missing field: 
{ name: "John" } 

여기에는 특별한 필드가 없으므로주의하십시오. _id 필드를 추가 할 수는 있지만 특별한 의미 체계가 없으므로 다른 필드와 마찬가지로 처리됩니다.

+0

종합적인 답변을 제공해 주셔서 감사합니다. 내가 참조! 사전 비교와 같아 보입니다. – Clara