[MONGODB] 하지 덮어 쓰기 모델은 한 번 몽구스를 컴파일 할 수
MONGODB하지 덮어 쓰기 모델은 한 번 몽구스를 컴파일 할 수
모르겠 내가 잘못을 뭘하는지, 여기 내 check.js입니다
var db = mongoose.createConnection('localhost', 'event-db');
db.on('error', console.error.bind(console, 'connection error:'));
var a1= db.once('open',function(){
var user = mongoose.model('users',{
name:String,
email:String,
password:String,
phone:Number,
_enabled:Boolean
});
user.find({},{},function (err, users) {
mongoose.connection.close();
console.log("Username supplied"+username);
//doSomethingHere })
});
여기 내 insert.js입니다
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/event-db')
var user = mongoose.model('users',{
name:String,
email:String,
password: String,
phone:Number,
_enabled:Boolean
});
var new_user = new user({
name:req.body.name,
email: req.body.email,
password: req.body.password,
phone: req.body.phone,
_enabled:false
});
new_user.save(function(err){
if(err) console.log(err);
});
내가 실행 check.js려고 할 때마다,이 오류를 받고 있어요
덮어 쓰기 '사용자'모델은 한 번 컴파일 할 수 없습니다.
이 오류로 인해 스키마의 미스 매칭에 관해서 이해하지만 이런 일이 어디 볼 수없는 이유는 무엇입니까? 나는 몽구스와 nodeJS 꽤 새로운 해요.
여기에 내가 내 MongoDB를의 클라이언트 인터페이스에서 받고 있어요 것입니다 :
MongoDB shell version: 2.4.6 connecting to: test
> use event-db
switched to db event-db
> db.users.find()
{ "_id" : ObjectId("52457d8718f83293205aaa95"),
"name" : "MyName",
"email" : "myemail@me.com",
"password" : "myPassword",
"phone" : 900001123,
"_enable" : true
}
>
해결법
-
==============================
1.이미 정의 된 스키마를 가지고 있기 때문에 오류가 발생하고 다시 스키마를 정의하고 있습니다. 일반적으로 당신이해야 할 것은 인스턴스화 한 번 스키마이며, 다음이 그것을 필요로하는 전역 객체 호출을 가지고있다.
이미 정의 된 스키마를 가지고 있기 때문에 오류가 발생하고 다시 스키마를 정의하고 있습니다. 일반적으로 당신이해야 할 것은 인스턴스화 한 번 스키마이며, 다음이 그것을 필요로하는 전역 객체 호출을 가지고있다.
예를 들면 :
user_model.js
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var userSchema = new Schema({ name:String, email:String, password:String, phone:Number, _enabled:Boolean }); module.exports = mongoose.model('users', userSchema);
check.js
var mongoose = require('mongoose'); var User = require('./user_model.js'); var db = mongoose.createConnection('localhost', 'event-db'); db.on('error', console.error.bind(console, 'connection error:')); var a1= db.once('open',function(){ User.find({},{},function (err, users) { mongoose.connection.close(); console.log("Username supplied"+username); //doSomethingHere }) });
insert.js
var mongoose = require('mongoose'); var User = require('./user_model.js'); mongoose.connect('mongodb://localhost/event-db'); var new_user = new User({ name:req.body.name , email: req.body.email , password: req.body.password , phone: req.body.phone , _enabled:false }); new_user.save(function(err){ if(err) console.log(err); });
-
==============================
2.당신이 다른 파일에 같은 모델을 사용하지만 경로가 다른 경우가 있습니다 필요한 경우 그래서 당신이 오류를 얻을 수있는 또 다른 이유이다. 내 상황에서 예를 들어 내가했다 :
당신이 다른 파일에 같은 모델을 사용하지만 경로가 다른 경우가 있습니다 필요한 경우 그래서 당신이 오류를 얻을 수있는 또 다른 이유이다. 내 상황에서 예를 들어 내가했다 :
필요 ( './ 모델 / 사용자) 하나 개의 파일에 다음 나는 ('./ 모델 / 사용자 ')를 필요로했던 사용자 모델에 대한 액세스를 필요로 다른 파일입니다.
나는 모듈의 모양을 추측 & 몽구스는 다른 파일로 취급된다. 나는 모두 일치하는 경우를 확인했다되면 더 이상 문제가 없었다.
-
==============================
3.내가 단위 테스트 동안이 문제를 가지고 있었다.
내가 단위 테스트 동안이 문제를 가지고 있었다.
당신이 모델 생성 함수를 호출 처음으로, 당신은 (예를 들어, '사용자')를 제공하는 키에 저장에게 모델을 몽구스. 당신이 한 번 이상 같은 키를 사용하여 모델 생성 함수를 호출하는 경우, 몽구스는 기존 모델을 덮어하지 않습니다.
모델이 이미와 몽구스에 있는지 확인할 수 있습니다 :
let users = mongoose.model('users')
모델이 존재하지 않는 경우에 순서대로 시도 / 캐치에 포장하거나 모델을 얻을, 또는 그것을 만들 수 있도록이 오류가 발생합니다 :
let users try { users = mongoose.model('users') } catch (error) { users = mongoose.model('users', <UsersSchema...>) }
-
==============================
4.테스트를 '보고'하는 동안이 문제를 가지고 있었다. 테스트를 편집 할 때, 시계 테스트를 재 - 실행하지만이 매우 이유로 인해 실패했습니다.
테스트를 '보고'하는 동안이 문제를 가지고 있었다. 테스트를 편집 할 때, 시계 테스트를 재 - 실행하지만이 매우 이유로 인해 실패했습니다.
나는 모델이 다음을 만드는 사람, 그것을 사용 존재하는 경우 확인하여 해결했습니다.
import mongoose from 'mongoose'; import user from './schemas/user'; export const User = mongoose.models.User || mongoose.model('User', user);
-
==============================
5.나는이 문제가 발생되어왔다 & 그것 때문에 스키마 정의의 것이 아니라 서버를 사용하지 않는 오프라인 모드의 아니었다 - 난 그냥이 그것을 해결하기 위해 관리 :
나는이 문제가 발생되어왔다 & 그것 때문에 스키마 정의의 것이 아니라 서버를 사용하지 않는 오프라인 모드의 아니었다 - 난 그냥이 그것을 해결하기 위해 관리 :
serverless offline --skipCacheInvalidation
여기 https://github.com/dherault/serverless-offline/issues/258 언급되는
바라건대 그 서버를 사용하지 않는 그들의 프로젝트를 구축하고 오프라인 모드를 실행하는 다른 사람이 도움이됩니다.
-
==============================
6.당신이 서버를 사용하지 않는 오프라인을 사용하고 --skipCacheInvalidation을 사용하지 않으려면, 당신은 아주 잘 사용할 수 있습니다 :
당신이 서버를 사용하지 않는 오프라인을 사용하고 --skipCacheInvalidation을 사용하지 않으려면, 당신은 아주 잘 사용할 수 있습니다 :
module.exports = mongoose.models.Users || mongoose.model('Users', UsersSchema);
-
==============================
7.당신이 여기 한 경우 당신이 내가했던 동일한 문제가 있다고 할 수있다. 내 문제는 내가 같은 이름의 다른 모델을 정의 된 것이 었습니다. 나는 내 갤러리 내 파일 모델 "파일"을 불렀다. 복사 및 붙여 넣기 젠장!
당신이 여기 한 경우 당신이 내가했던 동일한 문제가 있다고 할 수있다. 내 문제는 내가 같은 이름의 다른 모델을 정의 된 것이 었습니다. 나는 내 갤러리 내 파일 모델 "파일"을 불렀다. 복사 및 붙여 넣기 젠장!
-
==============================
8.나는 다음과 같이 쓸 때이 나에게 무슨 일이 있었 :
나는 다음과 같이 쓸 때이 나에게 무슨 일이 있었 :
import User from '../myuser/User.js';
그러나 진정한 경로는 '../myUser/User.js'입니다
-
==============================
9.나는 추가하여 해결
나는 추가하여 해결
mongoose.models = {}
라인 전 :
mongoose.model(<MODEL_NAME>, <MODEL_SCHEMA>)
희망은 당신의 문제를 해결
-
==============================
10.나는 허용 솔루션이 알고 있지만 기분이 너무 당신이 모델을 테스트 할 수있는 보일러를 많이에서 현재 솔루션 결과. 내 솔루션은 모델링 걸릴 모델이 등록되어 있지 않은 경우 새로운 모델을 반환하지만이 경우 기존의 모델을 반환하는 결과 함수의 내부에 배치하는 본질적으로.
나는 허용 솔루션이 알고 있지만 기분이 너무 당신이 모델을 테스트 할 수있는 보일러를 많이에서 현재 솔루션 결과. 내 솔루션은 모델링 걸릴 모델이 등록되어 있지 않은 경우 새로운 모델을 반환하지만이 경우 기존의 모델을 반환하는 결과 함수의 내부에 배치하는 본질적으로.
function getDemo () { // Create your Schema const DemoSchema = new mongoose.Schema({ name: String, email: String }, { collection: 'demo' }) // Check to see if the model has been registered with mongoose // if it exists return that model if (mongoose.models && mongoose.models.Demo) return mongoose.models.Demo // if no current model exists register and return new model return mongoose.model('Demo', DemoSchema) } export const Demo = getDemo()
사방에 개폐 연결은 실망 잘 압축하지 않습니다.
내가 오류를 얻을 수 없겠죠 모든 올바른 정보가 반환되는 내 시험에서 모델이 개 다른 장소 또는 더 구체적를 필요로한다면이 방법.
-
==============================
11.이 같은 컬렉션 이름이 다른 스키마의를 정의하는 경우이 문제가 발생할 수 있습니다
이 같은 컬렉션 이름이 다른 스키마의를 정의하는 경우이 문제가 발생할 수 있습니다
-
==============================
12.
If you want to overwrite the existing class for different collection using typescript then you have to inherit the existing class from different class. export class User extends Typegoose{ @prop username?:string password?:string } export class newUser extends User{ constructor() { super(); } } export const UserModel = new User ().getModelForClass(User , { schemaOptions: { collection: "collection1" } }); export const newUserModel = new newUser ().getModelForClass(newUser , { schemaOptions: { collection: "collection2" } });
-
==============================
13.모델 생성을 할 전에 존재하는 경우이 검사를 해결하려면 :
모델 생성을 할 전에 존재하는 경우이 검사를 해결하려면 :
if (!mongoose.models[entityDBName]) { return mongoose.model(entityDBName, entitySchema); } else { return mongoose.models[entityDBName]; }
-
==============================
14.스키마 정의가 수집 고유해야, 그것은 수집을 위해 두 개 이상의 스키마해서는 안됩니다.
스키마 정의가 수집 고유해야, 그것은 수집을 위해 두 개 이상의 스키마해서는 안됩니다.
-
==============================
15.스키마가 이미 있기 때문에, 검증 전에 새 스키마를 만드는 것입니다.
스키마가 이미 있기 때문에, 검증 전에 새 스키마를 만드는 것입니다.
var mongoose = require('mongoose'); module.exports = function () { var db = require("../libs/db-connection")(); //schema de mongoose var Schema = require("mongoose").Schema; var Task = Schema({ field1: String, field2: String, field3: Number, field4: Boolean, field5: Date }) if(mongoose.models && mongoose.models.tasks) return mongoose.models.tasks; return mongoose.model('tasks', Task);
-
==============================
16.당신은 쉽게 수행하여이 문제를 해결할 수
당신은 쉽게 수행하여이 문제를 해결할 수
delete mongoose.connection.models['users']; const usersSchema = mongoose.Schema({...}); export default mongoose.model('users', usersSchema);
-
==============================
17.나는 각각의 요청 때문에 나는이 오류를받은 동적으로 모델을 만들어야 할 상황이, 그러나, 나는 그것이 다음과 같은 요소 편집 방법을 사용하고 해결하기 위해 무엇을 사용 :
나는 각각의 요청 때문에 나는이 오류를받은 동적으로 모델을 만들어야 할 상황이, 그러나, 나는 그것이 다음과 같은 요소 편집 방법을 사용하고 해결하기 위해 무엇을 사용 :
var contentType = 'Product' var contentSchema = new mongoose.Schema(schema, virtuals); var model = mongoose.model(contentType, contentSchema); mongoose.deleteModel(contentType);
나는이 사람을 도울 수 있기를 바랍니다.
-
==============================
18.
The reason of this issue is: you given the model name "users" in the line <<<var user = mongoose.model('users' {>>> in check.js file and again the same model name you are giving in the insert file <<< var user = mongoose.model('users',{ >>> in insert.js This "users" name shouldn't be same when you declare a model that should be different in a same project.
-
==============================
19.때문에 Typegoose와 몽구스의 혼합과 코드베이스의 여기 끝나는 모든 사람들을 위해 :
때문에 Typegoose와 몽구스의 혼합과 코드베이스의 여기 끝나는 모든 사람들을 위해 :
각 하나에 대한 DB 연결을 만듭니다
몽구스 :
module.exports = db_mongoose.model("Car", CarSchema);
거위를 입력 :
db_typegoose.model("Car", CarModel.schema, "cars");
-
==============================
20.당신이 expressjs로 작업하는 경우, 당신은 스크립트가 인스턴스화 될 때 일단 만이라고 있도록 () 모델 정의 외부의 app.get를 이동해야 할 수도 있습니다.
당신이 expressjs로 작업하는 경우, 당신은 스크립트가 인스턴스화 될 때 일단 만이라고 있도록 () 모델 정의 외부의 app.get를 이동해야 할 수도 있습니다.
from https://stackoverflow.com/questions/19051041/cannot-overwrite-model-once-compiled-mongoose by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의 전체 및 부분 텍스트 검색 (0) | 2019.12.04 |
---|---|
[MONGODB] 어레이 내 요소 MongoDB에 의해 기 (0) | 2019.12.04 |
[MONGODB] 컬렉션의 속성을 매핑하기위한 감소 /지도 사용 (0) | 2019.12.04 |
[MONGODB] MongoDB의에서 중첩 된 배열을 업데이트 (0) | 2019.12.04 |
[MONGODB] 기존의 모든 필드를 포함하고 문서에 새로운 필드를 추가 (0) | 2019.12.04 |