2017-11-30 1 views
0

몽구스의 이상한 행동에 직면하고 있습니다.몽구스는 데이터베이스 만 쿼리 할 수 ​​없습니다.

이 간단한 바보 같은 코드를 분석해 보겠습니다.

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://127.0.0.1/sodatest', { 
    useMongoClient: true 
}); 

var db = mongoose.connection; 

var OriginalSchema = mongoose.Schema({ 
    addedd: Date, 
    endPoint: Object, 
    inserted: Number, 
    total: Number 
}); 


var OtherTestSchema = mongoose.Schema({ 
    what: String, 
    modified_at: Date 
}); 


var EndPointInTheDb = mongoose.model('aaa', OriginalSchema); 

db.on('error', console.error.bind(console, 'connection error:')); 
db.once('open', function() { 
    console.log("we are connected!"); 
}); 


EndPointInTheDb.find({}, (err: String, exit: any) => { 
    console.log("Errore : " + err) 
    console.log(exit) 
}); 

그것은 실패하고 수집 "AAA는"15 개 요소를 가지고 있기 때문에 그것은 실패

we are connected! 
********************* 
Error : null 
[] 
********************* 

돌아갑니다.

다른 이름 (소문자 이름이있는 다른 이름 제외)을 사용하여 db "sodatest"를 변경하고 다른 모음 이름을 'aaa'로 변경하면 올바른 대소 문자를 사용하면 문제가 발생하지 않습니다. 결과.

we are connected! 
********************* 
Error : null 
[ { _id: 59f76203592b426a16b8b32f, 
    modified_at: 2017-10-30T17:31:47.622Z, 
    last_position: 5, 
    what: 'CONTATOREGEOKEY', 
    __v: 0 } ] 
********************* 

나는 또 하나의 DB를 복사하려고했습니다

(그것은 여러 요소와도 작동), 적어도 대문자 문자와 이름

db.copyDatabase("sodatest","Prova14") 

(Prova14) 그러나 다시는 결과가 없습니다.

이름을 잘못 입력했는지 몇 시간 동안 확인했지만 실제로는 확실합니다.

다른 스키마 (14 개의 다른 유형의 스키마가있는 스키마)와도 작동하는 이유를 이해할 수 없습니다. 스키마 ("OtherTestSchema")를 사용하면 컬렉션 실제 스키마와 일치하지 않습니다. 소다.

아이디어가 있으십니까?

+0

'mongoose.set ('debug', true);'를 사용하여 디버그 모드를 켤 수 있습니다. 당신은 그것으로 무언가를 찾을 수 있습니다. – MikaS

+0

몽구스 : aaas.find ({}, {fields : {}}) 이것은 "디버그"의 유일한 행이며, 작동중인 db와 작동하지 않는 db에서 동일합니다. I –

+0

MongoBooster를 사용하여 수입 한 사실을 알 수 있습니까? 하지만 그것을 사용하여 어떤 문제없이 컬렉션을 쿼리 할 수 ​​있습니다. "db.aaa.find ({})"제대로 작동합니다. –

답변

1

몽구스는 컬렉션 이름이없는 경우 자동으로 's'를 컬렉션 이름 끝에 추가합니다. 예를 들어 :

// This will create a collection called 'aaas' since 'aaa' is passed as the 
// model name 
var EndPointInTheDb = mongoose.model('aaa', OriginalSchema); 

// This is how you declare your collection name with a custom collection 'aaa' 
var CorrectEndPointInTheDbToCollection = mongoose.model('aaa', OriginalSchema, 'aaa'); 

CorrectEndPointInTheDbToCollection.find({}, function(err, docs){ 
    console.log(docs) 
}) 

그래서 몽구스의 초기화는 mongoose.model는 ('모델 이름', 스키마, '옵션 모음 이름')입니다. 올바른 컬렉션을 가리키고 있음을 알 수 있도록 컬렉션 이름을 전달하는 것이 좋습니다.

+0

와우이 작품! –

관련 문제