반응형
    
    
    
  mongodb에서 컬렉션당 둘 이상의 스키마 사용
mongodb에서 컬렉션당 두 개 이상의 스키마를 사용하고 싶었습니다. 사용 방법...?
실행하려고 하면 다음 오류가 나타납니다.
오류:
OverwriteModelError: 덮어쓸 수 없습니다.
allUsers모델을 컴파일했습니다.
OverwriteModelError: 덮어쓸 수 없습니다.checkInOut모델을 컴파일했습니다.
여기 내 스키마.js.
   var mongoose = require('mongoose');
      var Schema = mongoose.Schema
          , ObjectId = Schema.ObjectId;
   var checkInInfoSchema= new Schema({
       name:String,
       loginSerialId:Number
   });
   var loginUserSchema = new Schema({
          sn : { type: Number, unique:true }
          ,uname: {type:String, unique:true}
          ,pass:String
      });
   var registerUserSchema = new Schema({
       sn : { type: Number, unique:true }
       , name: String   //his/her name
       ,pass:String,
       companyKey:{type:String},
       uname:{type:String,unique:true}
   });
   var checkInOutSchema = new Schema({
       uname: String
       ,companyKey:String
       ,task:String
       ,inTime:String
       ,outTime:String
       ,date:{type:String}
       ,serialId:{type:Number,unique:true}
       ,online:Boolean
   });
   //Different schema for same collection "allUsers"        
   var allUser=mongoose.model('allUsers',loginUserSchema);        
   var registerUser=mongoose.model('allUsers',registerUserSchema);
    //Different schema for same collection "checkInOut"
   var checkInOut=mongoose.model('checkInOut',checkInOutSchema);
   var checkInInfo=mongoose.model('checkInOut',checkInInfoSchema);
   module.exports={
       allUser:allUser, 
       registerUser:registerUser,
       checkInOut:checkInOut,
       checkInInfo:checkInInfo
   };
몽구스에서는 다음과 같은 작업을 수행할 수 있습니다.
var users = mongoose.model('User', loginUserSchema, 'users');
var registerUser = mongoose.model('Registered', registerUserSchema, 'users');
 
이 두 스키마는 '사용자' 컬렉션을 절약합니다.
자세한 내용은 설명서 http://mongoosejs.com/docs/api.html#index_Mongoose-model 을 참조하거나 다음과 같은 요지를 참조할 수 있습니다.
선택한 답변을 시도했지만 특정 모델 개체에 대해 쿼리할 때 두 스키마의 데이터를 모두 검색합니다.따라서 판별기를 사용하면 더 나은 해결책을 얻을 수 있다고 생각합니다.
const coordinateSchema = new Schema({
    lat: String,
    longt: String,
    name: String
}, {collection: 'WeatherCollection'});
const windSchema = new Schema({
   windGust: String,
   windDirection: String,
   windSpeed: String
}, {collection: 'WeatherCollection'});
//Then define discriminator field for schemas:
const baseOptions = {
    discriminatorKey: '__type',
    collection: 'WeatherCollection'
};
//Define base model, then define other model objects based on this model:
const Base = mongoose.model('Base', new Schema({}, baseOptions));
const CoordinateModel = Base.discriminator('CoordinateModel', coordinateSchema);
const WindModel = Base.discriminator('WindModel', windSchema);
//Query normally and you get result of specific schema you are querying:
mongoose.model('CoordinateModel').find({}).then((a)=>console.log(a));
 
출력 예:
{ __type: 'CoordinateModel', // discriminator field
    _id: 5adddf0367742840b00990f8,
    lat: '40',
    longt: '20',
    name: 'coordsOfHome',
    __v: 0 },
컬렉션 인수가 전달되지 않으면 Mongoose는 모델 이름을 사용합니다.이 동작이 마음에 들지 않으면 컬렉션 이름을 전달하거나 mongoose를 사용합니다.(),을 복수화하거나 스키마 컬렉션 이름 옵션을 설정합니다.
const schema = new Schema({ name: String }, { collection: 'actor' });
// or
schema.set('collection', 'actor');
// or
const collectionName = 'actor'
const M = mongoose.model('Actor', schema, collectionName)
언급URL : https://stackoverflow.com/questions/14453864/use-more-than-one-schema-per-collection-on-mongodb
반응형
    
    
    
  'source' 카테고리의 다른 글
| 컴파일 시 Dll Culture 폴더 사용 안 함 (0) | 2023.05.14 | 
|---|---|
| collid 6에 대해 bcp 클라이언트로부터 잘못된 열 길이를 수신했습니다. (0) | 2023.05.14 | 
| SQL 연결이 삭제되기 전에 닫아야 합니까()해야 합니까? (0) | 2023.05.09 | 
| SQL LIKE 절에서 SqlParameter 사용이 작동하지 않음 (0) | 2023.05.09 | 
| 이클립스에서 기존 프로젝트를 여는 방법 (0) | 2023.05.09 |