복붙노트

[MONGODB] 문자열이 MongoDB를 OBJECTID 경우 내가 확인할 수 있습니까?

MONGODB

문자열이 MongoDB를 OBJECTID 경우 내가 확인할 수 있습니까?

나는 BSON 문자열을 변환하여 MongoDB를 조회를하고있는 중이 야. 내가 가지고있는 문자열이 변환을 수행하기 전에 몽고에 대한 유효한 OBJECTID 경우 나 결정하기위한 방법이 있습니까?

여기에 내 현재 findById 메소드 기능에 대한 커피 스크립트입니다. 그것은 잘 작동하지만 문자열이 ID없는 결정하면 나는 다른 속성으로 조회하고 싶습니다.

db.collection "pages", (err, collection) ->
  collection.findOne
    _id: new BSON.ObjectID(id)
  , (err, item) ->
    if item
      res.send item
    else
      res.send 404

해결법

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

    1.나는 몽구스 ObjectId가 유효성 검사기가 유효하며 Object를 확인하기 위해 노력하고 있음을 발견하지만 유효하지 않은 ID가 유효한 것으로 간주 된 몇 가지 경우를 발견했다. (예 : 모든 12 자 문자열)

    나는 몽구스 ObjectId가 유효성 검사기가 유효하며 Object를 확인하기 위해 노력하고 있음을 발견하지만 유효하지 않은 ID가 유효한 것으로 간주 된 몇 가지 경우를 발견했다. (예 : 모든 12 자 문자열)

    var ObjectId = require('mongoose').Types.ObjectId;
    ObjectId.isValid('microsoft123'); //true
    ObjectId.isValid('timtomtamted'); //true
    ObjectId.isValid('551137c2f9e1fac808a5f572'); //true
    

    내게는 OBJECTID 문자열을 캐스팅 한 후 원래의 문자열이 OBJECTID의 문자열 값과 일치하는지 확인한다 무엇을 일하고있다.

    new ObjectId('timtamtomted'); //616273656e6365576f726b73
    new ObjectId('537eed02ed345b2e039652d2') //537eed02ed345b2e039652d2
    

    ObjectId가 있지만, OBJECTID에 캐스트 할 때 잘못된 유효한 의지의 변화를 유도 할 수있는 문자열로 주조 할 때이 작품은 유효 ID는 변경되지 않기 때문에.

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

    2.당신은 그것을 위해 테스트하는 정규 표현식을 사용할 수 있습니다 :

    당신은 그것을 위해 테스트하는 정규 표현식을 사용할 수 있습니다 :

    커피 스크립트

    if id.match /^[0-9a-fA-F]{24}$/
        # it's an ObjectID
    else
        # nope
    

    자바 스크립트

    if (id.match(/^[0-9a-fA-F]{24}$/)) {
        // it's an ObjectID    
    } else {
        // nope    
    }
    
  3. ==============================

    3.나는 과거에이 작업을 수행 할 기본 노드 MongoDB의 드라이버를 사용했다. 값이 유효한 BSON ObjectId가 있다는 isValid 검사 방법. 여기에 설명서를 참조하십시오.

    나는 과거에이 작업을 수행 할 기본 노드 MongoDB의 드라이버를 사용했다. 값이 유효한 BSON ObjectId가 있다는 isValid 검사 방법. 여기에 설명서를 참조하십시오.

    var ObjectID = require('mongodb').ObjectID;
    console.log( ObjectID.isValid(12345) );
    
  4. ==============================

    4.여기에 내가 앤디 - MacLeod 씨의 대답 @ 기반으로 작성한 일부 코드입니다.

    여기에 내가 앤디 - MacLeod 씨의 대답 @ 기반으로 작성한 일부 코드입니다.

    전달 된 값이 유효 또는 null의 경우는 무효 인 경우는 int 형 또는 문자열 또는 ObjectId가 반환 유효한 ObjectId가 하나를 사용할 수 있습니다 :

    var ObjectId= require('mongoose').Types.ObjectId;
    
    function toObjectId(id) {
    
        var stringId = id.toString().toLowerCase();
    
        if (!ObjectId.isValid(stringId)) {
            return null;
        }
    
        var result = new ObjectId(stringId);
        if (result.toString() != stringId) {
            return null;
        }
    
        return result;
    }
    
  5. ==============================

    5.문자열이 12 문자가 포함 된 경우 mongoose.Types.ObjectId.isValid (문자열)은 항상 True를 반환

    문자열이 12 문자가 포함 된 경우 mongoose.Types.ObjectId.isValid (문자열)은 항상 True를 반환

    let firstUserID = '5b360fdea392d731829ded18';
    let secondUserID = 'aaaaaaaaaaaa';
    
    console.log(mongoose.Types.ObjectId.isValid(firstUserID)); // true
    console.log(mongoose.Types.ObjectId.isValid(secondUserID)); // true
    
    let checkForValidMongoDbID = new RegExp("^[0-9a-fA-F]{24}$");
    console.log(checkForValidMongoDbID.test(firstUserID)); // true
    console.log(checkForValidMongoDbID.test(secondUserID)); // false
    
  6. ==============================

    6.당신이 16 진수 문자열이있는 경우이를 사용할 수 있습니다 :

    당신이 16 진수 문자열이있는 경우이를 사용할 수 있습니다 :

    ObjectId.isValid(ObjectId.createFromHexString(hexId));
    
  7. ==============================

    7.그것은 자신의 캐릭터에 Express.js 서버를 충돌했다와 ObjectId가 값을 비교하는 @Andy 마크 셀로드에 의해 제안 된 것과 같은 유효한 해결책을 얻기 위해 나에게 동안을했다 :

    그것은 자신의 캐릭터에 Express.js 서버를 충돌했다와 ObjectId가 값을 비교하는 @Andy 마크 셀로드에 의해 제안 된 것과 같은 유효한 해결책을 얻기 위해 나에게 동안을했다 :

    var view_task_id_temp=new mongodb.ObjectID("invalid_id_string"); //this crashed
    

    난 그냥이 문제를 해결하는 간단한 시도 캐치를 사용했다.

    var mongodb = require('mongodb');
    var id_error=false;
    try{
        var x=new mongodb.ObjectID("57d9a8b310b45a383a74df93");
        console.log("x="+JSON.stringify(x));
    }catch(err){
        console.log("error="+err);
        id_error=true;
    }
    
    if(id_error==false){
       // Do stuff here
    }
    
  8. ==============================

    8.OBJECTID이 유효한지 아닌지 몽구스를 들어, 사용 isValid () 함수는 확인

    OBJECTID이 유효한지 아닌지 몽구스를 들어, 사용 isValid () 함수는 확인

    예 :

    var ObjectId = mongoose.Types.ObjectId;
    if(ObjectId.isValid(req.params.documentId)){
       console.log('Object id is valid'); 
    }else{
       console.log('Invalid Object id');
    }
    
  9. ==============================

    9.제가 발견하는 방법은 내가 입력 출력과 같은 경우, 검사 할 새로운 값을 ObjectId가 작성하는 ID는 유효 :

    제가 발견하는 방법은 내가 입력 출력과 같은 경우, 검사 할 새로운 값을 ObjectId가 작성하는 ID는 유효 :

    function validate(id) {
        var valid = false;
        try
        {
            if(id == new mongoose.Types.ObjectId(""+id))
               valid = true;
    
        }
        catch(e)
        {
           valid = false;
        }
        return valid;
    }
    
    > validate(null)
    false
    > validate(20)
    false
    > validate("abcdef")
    false
    > validate("5ad72b594c897c7c38b2bf71")
    true
    
  10. ==============================

    10.가장 쉬운 방법은 기본적으로 시도 및 캐치 서비스에 ObjectId가 방법을 포장한다. 그럼 당신은 대신 직접 방법을 사용하는 Objecet 아이디의를 처리하기 위해이 서비스를 사용하고 있습니다 :

    가장 쉬운 방법은 기본적으로 시도 및 캐치 서비스에 ObjectId가 방법을 포장한다. 그럼 당신은 대신 직접 방법을 사용하는 Objecet 아이디의를 처리하기 위해이 서비스를 사용하고 있습니다 :

    var ObjectId = REQUIRE OR IMPORT ...
    
    // service
    function oid(str) {
     try {   
       return ObjectId(str);
     } catch(err) {
       return false;
     }
    }
    
    // usage
    if (oid(USER_INPUT)) {
      // continue
    } else {
      // throw error
    }
    

    또한 새로 생성 된 ID를 얻기 위해 null 또는 빈 소품을 보낼 수 있습니다.

  11. ==============================

    11.경고 : isValid가 유효한 16 진수로 시작하는 임의의 12/24 길이 문자열에 대해 true를 반환합니다. 현재 내가이 더 나은 체크 생각 :

    경고 : isValid가 유효한 16 진수로 시작하는 임의의 12/24 길이 문자열에 대해 true를 반환합니다. 현재 내가이 더 나은 체크 생각 :

  12. from https://stackoverflow.com/questions/13850819/can-i-determine-if-a-string-is-a-mongodb-objectid by cc-by-sa and MIT license