2014-12-18 4 views
9

this 게시물에서 upsert 작업에서 동일한 필드를 $set$setOnInsert 아래에 사용할 수 없다고 대답했습니다.

이유가 무엇인지 설명 할 수 있습니까? $setOnInsert$set과 충돌하지 않아야합니다. 전자는 문서가 삽입 될 때 사용되고 후자는 문서가 업데이트 될 때 사용되기 때문입니다.

+5

, 나는이 지금의 경우 이유에 대한 설명이 없습니다; 나는 이것을 구현하는 것을보고 싶다. '$ set'과'$ setOnInsert'가 같은 필드에서 같은 업데이트에서 작동 할 수 있도록 개선 요청 [SERVER-10711] (https://jira.mongodb.org/browse/SERVER-10711)이 있습니다 . 당신은 우선 순위를 높이기 위해 그 문제에 대해 코멘트하고,보고, upvote 할 수 있습니다. – wdberkeley

+1

@wdberkeley를 지적 해 주셔서 감사합니다. 두 개의 쿼리가 필요없이이 문제를 해결할 수 있는지 알고 계십니까? – jtmarmon

답변

5

$ 연산자는 upsert에도 사용됩니다. 따라서 같은 필드를 모두 $ 세트$ setOnInsert에 두는 것은 말도 안됩니다.

그냥 빈 컬렉션이 시도 : 솔직히

db.items.remove(); 
db.items.update({},{$set:{a:1},$setOnInsert:{b:2}},{upsert:1}) 
db.items.find({}); 
+4

"넌센스"가 아닙니다. 예를 들어, 문서가 방금 삽입 된 경우 필드를 'true'로, 방금 업데이트 한 경우 필드를 'false'로 설정해야합니다. '$ set' ('false')와'$ setOnInsert' ('true')에 동일한 필드가 존재하고 문서가 삽입되면'$ setOnInsert'의 필드는 존재하더라도 우선해야합니다 '$ set' 섹션에 있습니다. – maganap