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

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



답변

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

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


답변

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

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

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


답변

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

mongoose.mongo.BSONPure.ObjectID.isValid

또는

mongoose.Types.ObjectId.isValid


답변

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


답변

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

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);
}


답변

이것도 사용할 수 있습니다

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

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


답변

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
})
}
...

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