2016-06-04 2 views
3

저는 mongodb이 좋지 않아 하위 문서를 조작하기가 어렵습니다.배열 필드에 문서 삽입

{ 
    [[email protected]]: [ 
     { 
      email: '[email protected]', 
      createdAt: '0000-00-00', 
      updatedAt: '0000-00-00' 
     } 
    ], 
    [[email protected]]: [ 
     { ... }, 
     { ... } 
    ] 
} 

내가 그 콜렉션 '주소록'라고하고, 각 항목은 이메일, 이미지, 그렇게 만든 뭔가 일 같은 주소 정보를 포함하는 배열 유형입니다 : 내가 뭘 원하는이 같은 주소록을 구현합니다.

문제는 어떻게해야할지 모릅니다. $ addToSet 또는 $ push 같은 일부 연산자를 사용해야하는 것처럼 보이지만 올바르게 사용하는 방법을 알지 못합니다. 나는 시도하는 것 : 내가 아는

update({ 
    email: '[email protected]' 
}, { 
    $push: { 
     'address.$email': { 
      email: target, 
      createdAt: new Date(), 
      updatedAt: new Date() 
     } 
    } 
}) 

한 가지 컬렉션을 업데이트하는 옵션을 upsert 사용이 존재하지 않는 경우 새 문서를 만들지 만, 여전히 문서가 생성되지 않습니다되었다. 손을 얹어 주시면 매우 감사하겠습니다.

+0

그래서 mongoDB에 데이터를 바로 푸시하고 싶습니까? – Thinker

+0

이렇게 깊게 문서를 중첩하는 데 어려움이있을 수 있습니다. Mongo는 깊이 중첩 된 문서를 업데이트하는 데 어려움을 겪고 있습니다. –

+0

옳은 길을 가고있다. 기존 문서에서 내용을 추가하거나 제거하기 위해'$ push' 또는'$ pull'을 사용할 것이다. –

답변

1

제시된 구조가 하나의 문서에서 모든 사용자 데이터를 보유하고있는 것처럼 보입니다. 이것은 bson 문서가 16MB의 용량 제한을 가지고 있기 때문에 향후 처리에서 매우 까다로울 수 있습니다.

이 문서의 간단한 양식을 고려할 수있는 경우 :

{ 
    _id:bsonId,  
    email: '[email protected]', 
    createdAt: '0000-00-00', 
    updatedAt: '0000-00-00', 
    name: "unknown" 
} 

다음 업데이트하고 훨씬 쉽게 될 것입니다 컬렉션을 유지.

db.addressbook.update({ email: '[email protected]'},{name:"Happy User"}) 
+0

아 ... 각 문서를 제한하는 것을 잊어 버렸습니다. 나는 그것을 시도해야한다. 감사 :) – modernator