복붙노트

[MONGODB] 그것은 MongoDB를-쿼리에 캐스팅 할 수 있습니까?

MONGODB

그것은 MongoDB를-쿼리에 캐스팅 할 수 있습니까?

언제 이런 두 MongoDB의 문서를 가지고 ...

db.test.insert( {"value" : "10123"} );
db.test.insert( {"value" : "160"} );

같은 쿼리의 결과 :

db.test.find({"value" :{$gt : "12"} });

입니다 ..

{ "_id" : ObjectId("4c6d1b92304326161b678b89"), "value" : "160" }

그것은 내 첫 번째 값이 반환되지 않습니다 그래서, 문자열 비교가 이루어지는 것이 분명합니다. 쿼리 내에서 주조하는 방법은 없나요?

뭔가 같은 :

db.test.find({ (int) "value" :{$gt : 12} });

좋은 것입니다. 같은 쿼리

db.test.find({"value" :{$gt : 12} }); // without the quotes around "12"

아무 것도 반환하지 않습니다.

해결법

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

    1.다음과 같은 자바 스크립트 표현식을 사용할 수 있습니다 :

    다음과 같은 자바 스크립트 표현식을 사용할 수 있습니다 :

    db.test.find("this.value > 12")
    

    이 숫자 문자열에서 자바 스크립트의 자동 변환을 사용합니다.

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

    2.나는 비슷한 해결 방법을 가지고, 난 당신이 몽고 쉘을 사용할 수 있다면, 당신은 자바 스크립트에서이 작업을 수행 할 수있는 문을 쓸 수있는 것을 발견,하지만 인덱스를 사용할 수있는.

    나는 비슷한 해결 방법을 가지고, 난 당신이 몽고 쉘을 사용할 수 있다면, 당신은 자바 스크립트에서이 작업을 수행 할 수있는 문을 쓸 수있는 것을 발견,하지만 인덱스를 사용할 수있는.

    var myItems = []
    var it = db.test.find({},{value:1})
    while (it.hasNext()){
     var item = it.next();
     if(parseInt(item.value) > 12)
      myItems.push(item);
    }
    

    이 빨리 이전 솔루션에 비해 실행하려면 값 필드에 인덱스를 확인해야합니다.

  3. ==============================

    3.INT 사용이로 문자열을 변환하려면

    INT 사용이로 문자열을 변환하려면

    db.test.find({'year': {$type: 2}}).forEach(
        function (x) {
            x.value=new NumberInt(x.value); 
            db.test.save(x)}
        )
    

    그리고 이후에 직접처럼 조회 수 :

    db.test.find({"value" :{$gt : 12} });
    
  4. ==============================

    4.$이된다 유즈 케이스에 대해 설정되지 않았다. 당신은 문자열 정규식 사용해야합니다. 아마 쉽게 그냥 숫자로 번호가 새 필드를 만들 수 있습니다.

    $이된다 유즈 케이스에 대해 설정되지 않았다. 당신은 문자열 정규식 사용해야합니다. 아마 쉽게 그냥 숫자로 번호가 새 필드를 만들 수 있습니다.

  5. from https://stackoverflow.com/questions/3521601/is-it-possible-to-cast-in-a-mongodb-query by cc-by-sa and MIT license