복붙노트

[MONGODB] MongoDB의 가치에 의해 곱하기 필드

MONGODB

MongoDB의 가치에 의해 곱하기 필드

나는 기존의 숫자 필드를 가지고 식을 사용하여 수정합니다 업데이트 문을 만들 수있는 방법을 찾고 있었어요. 나는 가격라는 필드가있는 경우 예를 들어,이 업데이 트를 할 수 있다는 기존 값 50 %에 세트의 가격은?

따라서, 주어진 {가격 : 19.99}

내가 db.collection.update을하고 싶습니다 ({태그 : "리퍼브"}, {$ 세트 {가격 : 가격 * 0.50}}, 허위 사실);

이 작업이 완료 또는 내가 클라이언트로 값을 다시 읽어야 할 수 있습니다, 수정 후 업데이트? 나는 그 질문 캔 식은 업데이트에 사용되는 생각, 그들은 문서가 업데이트되고 참조 할 수 있습니다.

해결법

  1. ==============================

    1.당신은 db.eval와 서버 측 코드를 실행할 수 있습니다 ().

    당신은 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/ 참조

  2. ==============================

    2.새로운 몽고 2.6.x에 달러 (A $) MUL 연산자가있다. 그것은 다음과 같은 구문 수만큼 필드의 값을 곱합니다.

    새로운 몽고 2.6.x에 달러 (A $) MUL 연산자가있다. 그것은 다음과 같은 구문 수만큼 필드의 값을 곱합니다.

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

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

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

    3.몽고 4.2 시작, db.collection.update ()는 마지막으로 다른 필드를 기준으로 필드의 업데이트를 허용 집계 파이프 라인을 받아 들일 수 있습니다 :

    몽고 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  }
    
  4. ==============================

    4.그런데, 이것은 $으로하는 원자와 함께 동작 가능하다.

    그런데, 이것은 $으로하는 원자와 함께 동작 가능하다.

    당신은 몇 가지 옵션이 있습니다 :

    정말 당신의 상황에 따라 달라집니다 DB에 매우 낮은 압력으로, 나는 pingw33n의 솔루션을 갈 것입니다. 매우 높은 가동률로, 나는 세 번째 솔루션을 사용하는 것입니다.

  5. from https://stackoverflow.com/questions/8342725/multiply-field-by-value-in-mongodb by cc-by-sa and MIT license