2014-10-08 3 views
5

MongoDB에서 db.collection.save({_id:'abc'}, objectToSave)을 사용하여 업서 트를 수행 할 수 있습니다. , 저장 기능은 위의 기존 문서를 대체 할MongoDB db.collection.save 기존 개체 덮어 쓰기

{_id:'abc', field3:3}; 

:

이미 아래와 같은 _id 값을 가진 문서가 한의가 내 컬렉션에서

{_id:'abc', field1:1, field2:2}; 

아래로 objectToSave을 정의 할 수 컬렉션에

{_id:'abc', field1:1, field2:2}; 

내가 원하는 것은 $ 집합 연산을 수행하는 것입니다.

{_id:'abc', field1:1, field2:2, field3:3}; 

저장 기능에서이 작업을 수행 할 수 있습니까? 아니면 별도의 업데이트 문을 써야합니까?

objectToSave의 필드는 동적 임에 유의하십시오. 내가 사용하고있는 언어는 Node.JS입니다.

답변

4
db.collection.update({'_id':'abc'},{$set:{field1:1,field2:2}},{upsert:true}) 

당신이 원하는 일을해야 문서가 아직 존재하지 않는 경우, 효율적 너무 {_id:'abc',field1:1,field2:2}으로 생성되도록 인덱스가 존재해야하는 사용되기 때문에

  1. 그것은, upserts
  2. 문서가 이미있는 경우 field1 및 field2 필드는 update 문의 값으로 설정됩니다.
  3. 필드 중 하나가 문서에 있으면 덮어 씁니다.

당신이 사용하는 언어를 언급하지 않았으므로 일반 mongoDB에서는 save 기능이 없습니다. 엔티티의 새 버전과 지속 된 버전을 병합하는 명시적인 요구 사항은 매우 일반적인 것이므로 예, 사용자 정의 함수를 작성해야한다고 가정합니다.

+0

Markus, 한가지 언급하는 것을 잊어 버렸습니다. objectToSave의 필드 목록이 결정되지 않았습니다. 그래서 나는 특정 필드와 함께 update와 $ set을 사용할 수 없다. Node.JS를 사용하고 있습니다. – Lee

+0

왜 그럴까요? 임의의 수의 필드에 대해 set을 사용할 수 있습니다. 일치하는 객체를 만들고,'$ set'을위한 값으로 넘겨 주면 좋은 결과를 얻을 수 있습니다. –

+0

objectToSave에 _id 필드가 있고 _id 값이 컬렉션에 존재하는 것으로 확인되지 않았습니다. $ set은 _id 필드에 대한 업데이트를 허용하지 않습니다. – Lee

관련 문제