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
'bestsource' 카테고리의 다른 글
MongoDB의 Pymongo에서 카운트()는 어떻게 하나요? (0) | 2023.07.03 |
---|---|
WordPress - 태그 및 카테고리별로 필터링된 게시물 목록 생성 (0) | 2023.07.03 |
Java의 여러 데이터 소스(오라클, Excel, SQL 서버)에 액세스하기 위한 단일 SQL 쿼리 (0) | 2023.07.03 |
엔티티에 기본 키가 없는 보기 사용 (0) | 2023.07.03 |
Oracle jdbc에서 문 준비 및 타임스탬프 설정 (0) | 2023.07.03 |