[MONGODB] MongoDB를 $된다 / $ 문자열로 저장 관련 연산자 LT
MONGODBMongoDB를 $된다 / $ 문자열로 저장 관련 연산자 LT
나는 / 적은 사용자가 지정한 수보다보다 큰 가격으로 내 데이터베이스를 조회하기 위해 노력하고있어. 내 데이터베이스에서 가격과 같이 저장됩니다 :
{price: "300.00"}
워드 프로세서에 따르면,이 작업을해야합니다 :
db.products.find({price: {$gt:30.00}}).pretty()
하지만 어떤 결과를 반환받을. 나는 또한 시도했다 {가격 : {$에있다 : 30}}.
내가 무슨 말이냐?
그것은 그것을 가격이 문자열이 아닌 DB에서 숫자로 저장되기 때문에? 이 주위에 방법이 있나요?
해결법
-
==============================
1.당신이 문자열 $ 하였다를 사용하려는 경우, 당신은 성능면에서 크지 않다 정규식을 사용하는 것입니다. 단지 가격의 숫자 값을 유지하는 새 필드를 만들거나 INT / 더블이 필드 유형을 변경하는 것이 더 쉽습니다. 자바 스크립트 버전은 작업과 같이한다 :
당신이 문자열 $ 하였다를 사용하려는 경우, 당신은 성능면에서 크지 않다 정규식을 사용하는 것입니다. 단지 가격의 숫자 값을 유지하는 새 필드를 만들거나 INT / 더블이 필드 유형을 변경하는 것이 더 쉽습니다. 자바 스크립트 버전은 작업과 같이한다 :
db.products.find("this.price > 30.00")
JS는 사용하기 전에 숫자로 변환됩니다있다. 그러나 인덱스는이 쿼리에서 작동하지 않습니다.
-
==============================
2.$된다 모든 유형에서 작동 할 수있는 연산자이다 :
$된다 모든 유형에서 작동 할 수있는 연산자이다 :
db.so.drop(); db.so.insert( { name: "Derick" } ); db.so.insert( { name: "Jayz" } ); db.so.find( { name: { $gt: "Fred" } } );
보고:
{ "_id" : ObjectId("51ffbe6c16473d7b84172d58"), "name" : "Jayz" }
당신이 $있다 또는 $ LT와 숫자에 비교할 경우, 문서의 값은 숫자 여야합니다. MongoDB의의 유형은 엄격하고 같은 자동 변환하지 f.e. PHP에서 할 것입니다. 문제를 해결하기 위해, 반드시 숫자 (수레 또는 INT)로 같은 가격을 저장합니다
db.so.drop(); db.so.insert( { price: 50.40 } ); db.so.insert( { price: 29.99 } ); db.so.find( { price: { $gt: 30 } } );
보고:
{ "_id" : ObjectId("51ffbf2016473d7b84172d5b"), "price" : 50.4 }
-
==============================
3.당신이 MongoDB에의 새로운 버전이있는 경우 당신은이 작업을 수행 할 수 있습니다
당신이 MongoDB에의 새로운 버전이있는 경우 당신은이 작업을 수행 할 수 있습니다
$expr: { $gt: [ { $convert: { input: '$price', to: 'decimal' } }, { $convert: { input: '0.0', to: 'decimal' } } ] }
$ EXPR 운영자 : https://docs.mongodb.com/manual/reference/operator/query/expr/
$ 변환 opetator : https://docs.mongodb.com/manual/reference/operator/aggregation/convert/index.html
-
==============================
4.몽고 4.0부터, 다양한 유형의 변환은 (문자열에서이 경우에) 두 번 할 수있는 새로운 $의 toDouble 집계 연산자가있다 :
몽고 4.0부터, 다양한 유형의 변환은 (문자열에서이 경우에) 두 번 할 수있는 새로운 $의 toDouble 집계 연산자가있다 :
// { price: "300.00" } // { price: "4.2" } db.collection.find({ $expr: { $gt: [{ $toDouble: "$price" }, 30] } }) // { price: "300.00" }
-
==============================
5.또는 당신에 따라, int로 값을 변환 할 수 있습니다 : http://www.quora.com/How-can-I-change-a-field-type-from-String-to-Integer-in-mongodb
또는 당신에 따라, int로 값을 변환 할 수 있습니다 : http://www.quora.com/How-can-I-change-a-field-type-from-String-to-Integer-in-mongodb
var convert = function(document){ var intValue = parseInt(document.field, 10); db.collection.update( {_id:document._id}, {$set: {field: intValue}} ); } db.collection.find({field: {$type:2}},{field:1}).forEach(convert)
from https://stackoverflow.com/questions/18039358/mongodb-gt-lt-operators-with-prices-stored-as-strings by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 동적 라이브러리 php_mongo.dll를로드 할 수 PHP 시작 할 수 없습니다 (0) | 2019.12.10 |
---|---|
[MONGODB] MongoDB의 서버는 여전히 인증없이 액세스 할 수 있습니다 (0) | 2019.12.09 |
[MONGODB] 몽구스 / MongoDB의 결과 필드는 자바 스크립트에서 정의되지 않은 나타납니다 (0) | 2019.12.09 |
[MONGODB] MongoDB의 일치는 기본이되는 문자와 같은 문자를 악센트 (0) | 2019.12.09 |
[MONGODB] MongoDB를 별개의 기록을 얻을 (0) | 2019.12.09 |