Node.js Mongoose.js 문자열을 ObjectId 함수로


174

몽구스를 사용하여 노드에서 문자열을 objectId로 바꾸는 기능이 있습니까? 스키마는 무언가가 ObjectId임을 지정하지만 문자열에서 저장하면 mongo는 여전히 문자열이라고 말합니다. 예를 들어 객체의 _id는로 표시됩니다 objectId("blah").

답변:


419

당신은 그렇게 할 수 있습니다 :

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

예,이 경우에는 약간 더 깨끗합니다. 만 () FROMTIME을하는 경우 mongo.BSONPure를 사용할 필요가있다
talentedmrjones

3
유효하지 않은 문자열이면 오류가 발생합니까? mongo id 필드에 대한 REST API에서 입력 유효성 검증을 수행하는 가장 좋은 방법을 찾고 있습니다.
Zambonilli

1
이 방법론을 사용하면 문자열이 변환되고 원본과 동일하지 않기 때문에 실제로 질문에 대답하지 않습니다.
ed209

mongoose.Types.ObjectId (id)이지만 내 ID는 정의되어 있지 않으며 반환되는 것은 무엇입니까? 새로운 ID 또는 오류
Keval 밧

@KevinDente Typescript와 함께 Nodejs를 사용하고 있습니다. 솔루션을 시도했지만 여전히 문자열을 얻고 쿼리가 반환 해야하는 것을 반환하지 않습니다. typescript에서 어떻게하는지에 대한 아이디어가 있습니까?
SOufiane Fadil

9

다음과 같이 할 수 있습니다 :

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

편집 : 새로운 표준에는 fromString이 아닌 fromHexString이 있습니다.


1
더 많은 "새로운"표준은 mongoose.mongo.BSONPure.ObjectID.createFromHexString () (
Mongoose

1
이 작업을 시도하는 사람들에게는 이미 몽고 ID를 사용하고 있다면 ID를 변환하지 않기 때문에 선택한 답변보다 훨씬 나은 답변입니다.
ed209

1
더 이상 작동하지 않습니다. 대신 수락 된 답변을 사용하십시오
paper1111

BSONPure는 저의 일부가 아닙니다 mongoose.mongo. 아무도 확인할 수 있습니까?
Artur Tagisow

5

의견에서 판단하면 다음을 찾고 있습니다.

mongoose.mongo.BSONPure.ObjectID.isValid

또는

mongoose.Types.ObjectId.isValid

5
var mongoose = require('mongoose');
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001");

3
당신의 차이에 대해 언급 할 수 mongoose.Types.ObjectIdmongoose.mongo.ObjectId? 몽구스의 객체 속성은 다르지만 아래에서 동일한 방법을 참조하고있을 수 있습니다. Typesvs 의 기본 방법에 대해 의견을 말하십시오 mongo.
steampowered

5

이 방법을 해결할 수 없었습니다 (물론 오랫동안 검색하지 않았습니다)

mongoose.mongo.BSONPure.ObjectID.fromHexString

스키마가 속성이 ObjectId 유형 인 것으로 예상하면 변환은 암시 적입니다. 최소한 4.7.8의 경우처럼 보입니다.

그러나 다음과 같은 것을 사용할 수 있습니다.

function toObjectId(ids) {

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

    return mongoose.Types.ObjectId(ids);
}

3

이것도 사용할 수 있습니다

const { ObjectId } = require('mongodb');
const _id = ObjectId("4eb6e7e7e9b7f4194e000001");

그것을하는 가장 간단한 방법입니다


0

express 및 mongoose를 통해 REST API를 구현하는 경우 아래 코드 스 니펫을 참조하십시오. (ADD의 예)

....
exports.AddSomething = (req,res,next) =>{
  const newSomething = new SomeEntity({
 _id:new mongoose.Types.ObjectId(), //its very own ID
  somethingName:req.body.somethingName,
  theForeignKey: mongoose.Types.ObjectId(req.body.theForeignKey)// if you want to pass an object ID
})
}
...

그것이 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.