bestsource

Mongodb에서 필드 값 곱셈

bestsource 2023. 7. 3. 23:01
반응형

Mongodb에서 필드 값 곱셈

기존 숫자 필드를 사용하고 식을 사용하여 수정하는 업데이트 문을 만드는 방법을 찾고 있습니다.예를 들어, 제가 Price라는 필드를 가지고 있다면 Price를 기존 값에서 50%로 설정하는 업데이트가 가능한가요?

그래서.{ Price : 19.99 }

하고 싶습니다db.collection.update({tag : "refurb"}, {$set {Price : Price * 0.50 }}, false, true);

이 작업을 수행할 수 있습니까? 아니면 클라이언트에 값을 다시 읽고 수정한 다음 업데이트해야 합니까? 그렇다면 문제는 표현식을 업데이트에 사용할 수 있는지, 그리고 업데이트 중인 문서를 참조할 수 있는지입니다.

서버 측 코드를 실행할 수 있습니다.db.eval().

db.eval(function() { 
    db.collection.find({tag : "refurb"}).forEach(function(e) {
        e.Price = e.Price * 0.5;
        db.collection.save(e);
    });
});

이렇게 하면 DB가 차단되므로 찾기-업데이트 작업 쌍을 수행하는 것이 좋습니다.

https://docs.mongodb.com/manual/core/server-side-javascript/ 을 참조하십시오.

새로운 Mongo 2.6.x에는 $mul 연산자가 있습니다.필드 값에 다음 구문을 사용하는 숫자를 곱합니다.

{
  $mul: { field: <number> }
}

따라서 귀하의 경우 다음을 수행해야 합니다.

db.collection.update(
  { tag : "refurb"},
  { $mul: { Price : 0.5 } }
);

시작하는Mongo 4.2집계db.collection.update() 파이프라인을 수락하여 다른 필드를 기반으로 필드를 업데이트할 수 있습니다.

// { price: 19.99 }
// { price: 2.04  }
db.collection.update(
  {},
  [{ $set: { price: { $multiply: [ 0.5, "$price" ] } } }],
  { multi: true }
)
// { price: 9.995 }
// { price: 1.02  }
  • 첫 번째 파트{}업데이트할 문서(이 경우 모든 문서)를 필터링하는 일치 쿼리입니다.

  • 제2부[{ $set: { price: ... } }]업데이트 집계 파이프라인입니다(집계 파이프라인 사용을 나타내는 대괄호 참조).$set 의 새 집계 연산자 및 별칭입니다.$addFields방법에 주목price자체 값을 기준으로 직접 수정됩니다($price).

  • 잊지 마세요.{ multi: true }그렇지 않으면 첫 번째 일치 문서만 업데이트됩니다.

원자력 연산을 $set로 하면 가능합니다.

다음과 같은 여러 가지 옵션이 옵션은 다음과 같습니다.

  • pingw33n에서 제안한 eval() 솔루션을 사용합니다.
  • 수정할 문서를 검색하여 현재 값을 가져오고 집합으로 수정합니다.
  • 작업 속도가 높은 경우 이전 솔루션을 사용하여 값을 가져오는 동안 포커스가 변경되지 않았는지 확인하여 findAndModify 작업을 사용할 수 있습니다( 페이지를 참조하여 작업 방법을 참조하십시오).

그것은 정말 당신의 상황에 달려 있습니다: db에 대한 매우 낮은 압력으로, 저는 pingw33n의 솔루션을 선택할 것입니다.가동률이 매우 높으면 세 번째 솔루션을 사용할 것입니다.

언급URL : https://stackoverflow.com/questions/8342725/multiply-field-by-value-in-mongodb

반응형