programing

MongoDB 업데이트 조건

closeapi 2023. 5. 11. 21:27
반응형

MongoDB 업데이트 조건

조건에 따라 컬렉션의 일부 필드를 업데이트하려고 합니다.

필드를 설정하고 싶습니다.active로.true조건이 그렇다면true에게false그렇지않으면

조건 없이 업데이트됩니다.

db.consent.update(
{}, //match all
{
    $set: {
        "active": true
    }
}, 
{
    multi: true,
}

)

다음과 같이 업데이트할 조건을 추가하고 싶습니다.

db.consent.update(
{},
$cond: {
    if: {

        $eq: ["_id", ObjectId("5714ce0a4514ef3ef68677fd")]

    },
    then: {
        $set: {
            "active": true
        }
    },
    else: {
        $set: {
            "active": false
        }
    }
}, 
{
    multi: true,
}

)

https://docs.mongodb.org/manual/reference/operator/update-field/ 에 따르면 없습니다.$cond업데이트할 연산자입니다.

이 업데이트를 단일 명령으로 실행하기 위한 옵션은 무엇입니까?

시작하는Mongo 4.2집계db.collection.update() 파이프라인을 수락할 수 있으며, 마지막으로 다른 필드를 기준으로 필드를 업데이트/생성할 수 있습니다.

// { a: "Hello", b: "World" }
// { a: "Olleh", b: "Dlrow" }
db.collection.updateMany(
  {},
  [ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ]
)
// { a: "Hello", b: "World", active: true  }
// { a: "Olleh", b: "Dlrow", active: false }
  • 첫 번째 파트{}업데이트할 문서(이 경우 모든 문서)를 필터링하는 일치 쿼리입니다.

  • 제2부[ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ]업데이트 집계 파이프라인입니다(집계 파이프라인 사용을 나타내는 대괄호 참조).$set 의 새 집계 연산자 및 별칭입니다.$addFields그러면 임의의 집계 연산자를 사용할 수 있습니다.$set단계; 우리의 경우, 새로운 것에 사용할 값에 따라 달라지는 조건부 평등 검사.active들판.

집계 파이프라인을 사용하여 수행할 수 있습니다.여기서 저는 남성에서 여성으로, 여성에서 남성으로 업데이트하고 있습니다.

db.customer.updateMany(
   { },
   [
     { $set: { gender: { $switch: {
                           branches: [
                               { case: { $eq: [ "$gender", 'male' ] }, then: "female" },
                               { case: { $eq: [ "$gender", 'female' ] }, then: "male" }
                           ],
                           default: ""
     } } } }
   ]
)

그럴수는 없어요.

Mongo는 update 문의 필드, 조건 등의 조합을 지원하지 않습니다.


아래의 https://stackoverflow.com/a/56551655/442351 을 참조하십시오.

MongoDB 버전 3.2+가 있는 경우 findAndModify()를 사용하여 MongoDB 문서를 조건부로 업데이트하거나 OneAndUpdate()를 찾을 수 있습니다.

물론 2개의 쿼리를 실행하면...

db.collection.update({condition}, { $set: { state } }, { multi: true });
db.collection.update({!condition}, { $set: { state } }, { multi: false });

예를 들어

db.consent.update(
  {"_id": ObjectId("5714ce0a4514ef3ef68677fd")},
  { $set: { "active": true } });

db.consent.update(
  {"_id": {$ne: ObjectId("5714ce0a4514ef3ef68677fd")}},
  { $set: { "active": false } },
  { multi: true });
db.consent.update(
    {
       //YOUR CONDITIONAL HERE TO APLLAY UPDATE ONLY IF CONDITIONAL HAPPEN, SO THE "active": true WILL BE APPLY. 
    }, 
    {
       $set: {
         "active": true,
         "active2": FALSE,
       }
    }, 
    {
        multi: true,
    }
)

언급URL : https://stackoverflow.com/questions/36698569/mongodb-update-with-condition

반응형