source

MongoDb: $push/$addtoset의 차이

itover 2023. 4. 2. 10:23
반응형

MongoDb: $push/$addtoset의 차이

MongoDb의 문서를 읽고 간단한 증명서를 사용했는데 Push는 어레이를 정렬하는 것이지만addtoSet안 그래?

저는 시각적으로 똑같아요. 차이를 모르겠어요.

누가 그 차이를 설명해 줄 수 있나요?

또 다른 사람들은 스페인어나 간단한 영어로 할 수 있다면, 내가 바로 말할 수 있을 거라고 생각한다.

$addToSet반면 이미 항목이 포함되어 있는 경우 해당 필드에 항목을 추가하지 마십시오.$push지정된 객체가 존재하는지 여부에 관계없이 필드에 추가됩니다.

{_id: "docId", items: [1, 2]}
db.items.update({_id:"docId"}, {$addToSet:{items: 2}}); // This won't update the document as it already contains 2
db.items.update({_id:"docId"}, {$push: {items:2}}); // this will update the document. new document {_id: "docId", items:[1,2,2]}

$syslog - 받은 순서대로 항목을 추가합니다.또한 동일한 항목을 여러 번 추가할 수 있습니다.

$addToSet - 고유한 항목만 추가되지만 항목 순서는 보장되지 않습니다.

원하는 항목을 순서대로 추가해야 할 경우 $addToSet을 통해 요소를 그룹화하고 추가한 후 요소를 사용하여 어레이를 $wind 해제하고 항목별로 $sort한 후 $push 항목을 사용하여 $group을 다시 수행할 수 있습니다.

다른 사람들이 언급한 차이점들과 함께

  • $push: 개체를 배열에 추가합니다.
  • $addToSet: 개체가 없는 경우 어레이에 개체를 추가합니다.

레플리케이션에는 차이가 있습니다.(이것을 보면,local.oplog.rs)

  • $push(어레이를 실제로 수정한) 조작은 다음과 같이 복제됩니다.$set.items.INDEX: item
  • $addToSet(어레이를 실제로 수정한) 조작은 다음과 같이 복제됩니다.$set.items: [THE_ENTIRE_ARRAY]

대규모 어레이를 취급하는 경우에는 큰 차이가 있을 수 있습니다.

(독특한 어레이를 유지하기 위한 일반적인 사용 사례)

db.items.updateOne(
  {_id: 'my-id', 'items': {'$ne': 'items1'},
  {'$push': {
    'items': 'item1',
  }}
)

db.items.updateOne(
  {_id: 'my-id'},
  {'$addToSet': {
    'items': 'item1',
  }}
)

에서는 동일한 문서가 생성될 수 있지만 복제된 작업에 차이가 있습니다.

$addToSet과 $push는 동일한 작업을 수행하지만 $push는 중복을 무시한 채 모든 항목을 푸시합니다.전자는 중복되지 않고 고유한 항목만 푸시합니다.

이름에서 알 수 있듯이 $addToSet(세트)은 중복을 허용하지 않으며 $push는 요소를 배열에 추가합니다.

$push: 결과 문서의 배열에 값을 삽입합니다.예:

db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])

$addToSet: 결과 문서의 배열에 값을 삽입하지만 중복은 만들지 않습니다.예:

db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])

언급URL : https://stackoverflow.com/questions/27248556/mongodb-difference-between-push-addtoset

반응형