복붙노트

[MONGODB] MongoDB를 : 대신 '_id'출력 'ID'

MONGODB

MongoDB를 : 대신 '_id'출력 'ID'

I 출력 ID 대신 _id하는 가장 좋은 방법은 무엇인지, (노드) 몽구스를 사용하고?

해결법

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

    1.내가 이렇게 내 모델에 toClient () 메소드를 만들 수 있습니다. 또한 제거 / 클라이언트에 보내려고하지 않는 다른 속성의 이름을 바꿀 수있는 좋은 장소입니다 :

    내가 이렇게 내 모델에 toClient () 메소드를 만들 수 있습니다. 또한 제거 / 클라이언트에 보내려고하지 않는 다른 속성의 이름을 바꿀 수있는 좋은 장소입니다 :

    Schema.method('toClient', function() {
        var obj = this.toObject();
    
        //Rename fields
        obj.id = obj._id;
        delete obj._id;
    
        return obj;
    });
    
  2. ==============================

    2.당신은 몽구스를 사용하는 감안할 때, 당신은 몽구스가 생성하는 본질적으로 가짜 필드입니다 'virtuals에'를 사용할 수 있습니다. 그들은이 DB에 저장하지 않는, 그들은 단지 실행 시간에 채워 :

    당신은 몽구스를 사용하는 감안할 때, 당신은 몽구스가 생성하는 본질적으로 가짜 필드입니다 'virtuals에'를 사용할 수 있습니다. 그들은이 DB에 저장하지 않는, 그들은 단지 실행 시간에 채워 :

    // Duplicate the ID field.
    Schema.virtual('id').get(function(){
        return this._id.toHexString();
    });
    
    // Ensure virtual fields are serialised.
    Schema.set('toJSON', {
        virtuals: true
    });
    

    toJSON은이 스키마에서 생성 모델에 호출 될 때마다, 그것은 몽고가 생성하는 _id 필드를 일치하는 'ID'필드를 포함합니다. 마찬가지로 당신은 같은 방법으로 toObject의 동작을 설정할 수 있습니다.

    만나다:

    당신은 BaseSchema에이 추상 모든 모델은 / 연장 한 곳에서 논리를 계속 호출 할 수 있습니다. 나는 엠버 정말와 일할 수있는 'ID'필드가 선호하기 때문에, 엠버 / 노드 / 몽구스 응용 프로그램을 만드는 동안 위를 썼다.

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

    3.이 기능의 몽구스 4.0 부분으로 상자 밖으로 지원됩니다. @Pascal Zajac에 의해 설명 된대로 더 이상 수동으로 가상 ID 필드를 추가 할 필요가 없습니다 것.

    이 기능의 몽구스 4.0 부분으로 상자 밖으로 지원됩니다. @Pascal Zajac에 의해 설명 된대로 더 이상 수동으로 가상 ID 필드를 추가 할 필요가 없습니다 것.

    그러나, JSON이 필드를 내보내려면, 여전히 가상 필드의 직렬화를 사용하는 데 필요한 것 :

    Schema.set('toJSON', {
        virtuals: true
    });
    
  4. ==============================

    4.

    //Transform
    Schema.options.toJSON.transform = function (doc, ret, options) {
      // remove the _id of every document before returning the result
      ret.id = ret._id;
      delete ret._id;
      delete ret.__v;
    }
    

    이 역을 할 수있는 "Schema.options.toObject.transform"속성입니다 또는 당신은 가상 ID로 바로 설정 할 수있다.

  5. ==============================

    5.여기 @ user3087827에서 제공하는 대답의 다른 버전입니다. 당신이 schema.options.toJSON이 정의되지 않은 것으로 확인되면 당신은 사용할 수 있습니다 :

    여기 @ user3087827에서 제공하는 대답의 다른 버전입니다. 당신이 schema.options.toJSON이 정의되지 않은 것으로 확인되면 당신은 사용할 수 있습니다 :

    schema.set('toJSON', {
         transform: function (doc, ret, options) {
             ret.id = ret._id;
             delete ret._id;
             delete ret.__v;
         }
    }); 
    
  6. ==============================

    6.나는 이것을 사용 :

    나는 이것을 사용 :

    schema.set('toJSON', {
      virtuals: true,
      versionKey:false,
      transform: function (doc, ret) {   delete ret._id  }
    });
    

    나는 virtuals에 해당하는 경우이 경우 그들은 자동으로 억제 _id 좋은 것 같아요.

  7. ==============================

    7.나는 쉽게 내 모든 프로젝트에 대한 모든 스키마가 전 세계적으로의에 적용하는 것이이 목적을 위해 플러그인을 사용하여 만들었습니다. 이 ID에 _id 변환뿐만 아니라 __v 매개 변수를 제거합니다.

    나는 쉽게 내 모든 프로젝트에 대한 모든 스키마가 전 세계적으로의에 적용하는 것이이 목적을 위해 플러그인을 사용하여 만들었습니다. 이 ID에 _id 변환뿐만 아니라 __v 매개 변수를 제거합니다.

    이 변환 그래서 :

    {
      "_id": "400e8324a71d4410b9dc3980b5f8cdea",
      "__v": 2,
      "name": "Item A"
    }
    

    간단하고 청소기 :

    {
      "id": "400e8324a71d4410b9dc3980b5f8cdea",
      "name": "Item A"
    }
    

    글로벌 플러그인으로 사용 :

    const mongoose = require('mongoose');
    mongoose.plugin(require('meanie-mongoose-to-json'));
    

    또는 특정 스키마 :

    const mongoose = require('mongoose');
    const Schema = mongoose.Schema;
    const MySchema = new Schema({});
    MySchema.plugin(require('meanie-mongoose-to-json'));
    

    이 사람을 도움이되기를 바랍니다.

  8. ==============================

    8.당신은 당신이 원하는 요소를 선택하는 lodash를 사용하는 경우, 이것은 당신을 위해 작동합니다.

    당신은 당신이 원하는 요소를 선택하는 lodash를 사용하는 경우, 이것은 당신을 위해 작동합니다.

    UserSchema.virtual('id').get(function(){
      return this._id.toHexString();
    });
    
    UserSchema.set('toObject', { virtuals: true })
    
    UserSchema.methods.toJSON = function() {
      return _.pick( 
        this.toObject(), 
        ['id','email','firstName','lastName','username']
      );
    
  9. ==============================

    9.새에 의해 덮어 쓰기의 기본 방법 toJSON :

    새에 의해 덮어 쓰기의 기본 방법 toJSON :

    schema.method('toJSON', function () {
       const { __v, _id, ...object } = this.toObject();
       object.id = _id;
       return object;
    });
    
  10. ==============================

    10.true로 http://alexeypetrushin.github.com/mongo-lite 해당 세트 convertId 옵션을 않는 다른 드라이버가 있습니다. 자세한 내용은 "기본 및 설정"절을 참조하십시오.

    true로 http://alexeypetrushin.github.com/mongo-lite 해당 세트 convertId 옵션을 않는 다른 드라이버가 있습니다. 자세한 내용은 "기본 및 설정"절을 참조하십시오.

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

    11.반환에 항목을 검색 할 때 당신은 또한 집계 함수를 사용할 수 있습니다. $ 프로젝트는 당신이 당신이하고 _ID에 할당 할 수 있습니다 필드를 만들 수 있습니다.

    반환에 항목을 검색 할 때 당신은 또한 집계 함수를 사용할 수 있습니다. $ 프로젝트는 당신이 당신이하고 _ID에 할당 할 수 있습니다 필드를 만들 수 있습니다.

    <model>.aggregate([{$project: {_id: 0, id: '$_id'}], (err, res) => {
     // 
    })
    
  12. from https://stackoverflow.com/questions/7034848/mongodb-output-id-instead-of-id by cc-by-sa and MIT license