2011-07-05 4 views
101

mongoose를 사용하여 노드의 문자열을 objectId로 변환하는 함수가 있습니까? 스키마는 무언가가 ObjectId라는 것을 지정하지만 문자열로부터 저장 될 때 mongo는 그것이 여전히 문자열이라고 알려줍니다. 예를 들어, 개체의 _id는 objectId("blah")으로 표시됩니다.Node.js ObjectId 함수에 대한 Mongoose.js 문자열

답변

260

을 fromString했습니다

var mongoose = require('mongoose'); 
var id = mongoose.Types.ObjectId('4edd40c86762e0fb12000003'); 
+0

이 경우 약간 더 깨끗합니다. fromTime()을 수행하는 경우에만 mongo.BSONPure를 사용해야 할 수도 있습니다. – talentedmrjones

+3

잘못된 문자열 인 경우 오류가 발생합니까? mongo id 필드에 대한 REST API에서 입력 유효성 검사를 수행하는 가장 좋은 방법을 찾고 있습니다. – Zambonilli

+1

실제로 오류가 발생합니다. – Zambonilli

10

당신은 이런 식으로 작업을 수행 할 수 있습니다

var mongoose = require('mongoose'); 
var _id = mongoose.mongo.BSONPure.ObjectID.fromHexString("4eb6e7e7e9b7f4194e000001"); 

편집 : 새로운 표준이 fromHexString보다는 당신과 같이 그것을 할 수

+1

음, 더 많은 "새로운"표준은이 () (mongoose.mongo.BSONPure.ObjectID.createFromHexString 것으로 보인다 mongoose 3.9.7) – Evereq

+1

이 작업을 시도하는 사람들은 이미 몽고 ID를 사용하고있는 경우 ID를 변환하지 않으므로 선택한 응답보다 훨씬 더 나은 대답입니다. – ed209

+1

더 이상 작동하지 않습니다. 허용 된 대답을 사용하십시오. – paper1111

5

을 주석으로 판단, 당신은 찾고 있습니다 :

mongoose.mongo.BSONPure.ObjectID.isValid 

또는

mongoose.Types.ObjectId.isValid 
2
var mongoose = require('mongoose'); 
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001"); 
스키마는 속성 유형의 ObjectId가 될 것으로 기대하고 경우에 나는이 방법 (일반적으로 인정 하듯이 내가 오랫동안 검색하지 않은)

mongoose.mongo.BSONPure.ObjectID.fromHexString 

를 확인할 수 없습니다

+0

이것은 정확히 받아 들인 대답 –

+1

와 동일합니다.'mongoose.Types.ObjectId'와'mongoose.mongo.ObjectId'의 차이점에 대해 의견을 말씀해 주실 수 있습니까? 몽구스의 객체 속성은 다르지만 아래의 동일한 메소드를 참조 할 수 있습니다. 'Types'와'mongo'의 근본적인 메소드에 대해 의견을 말하십시오. – steampowered

2

전환이 함축되어있다. 적어도 이것은 4.7.8에있는 것처럼 보인다.

당신이 그러나, 더 플렉스 조금주는 같은 것을 사용할 수 있습니다

function toObjectId(ids) { 

    if (ids.constructor === Array) { 
     return ids.map(mongoose.Types.ObjectId); 
    } 

    return mongoose.Types.ObjectId(ids); 
}