2012-02-01 7 views
8

Sto provando a creare un semplice programma di esempio MongooseJS che ottiene un elenco di elementi da una raccolta e che torna ogni volta vuoto. Ecco il codice:Le domande JS di Mongoose tornano tutte nulle o vuote

var mongoose = require('mongoose') 
    , Schema = mongoose.Schema; 

var sampleSchema = new Schema({ 
    sampleField : String 
}); 

var db = mongoose.connect('mongodb://localhost:27017/test'); 

var sampleCollection = mongoose.model('sampleCollection', sampleSchema); 

sampleCollection.find({ } , function (err, items) { 
    console.log(items); // outputs [] 
    console.log(err); // outputs null 
    items.forEach(function(item) { 
     console.log(item); // does not reach this code 
    }); 
}); 

Ho un'istanza predefinita di MongoDB in esecuzione, e questo è ciò che ho inserito nella shell:

> use test 
> db.sampleCollection.save({sampleField : "Hello"}); 
> db.sampleCollection.save({sampleField : "Goodbye"}); 
> db.sampleCollection.find({}); 
{ "_id" : ObjectId("4f28944b38b59225012109da"), "sampleField" : "Hello" } 
{ "_id" : ObjectId("4f28945138b59225012109db"), "sampleField" : "Goodbye" } 

Qualsiasi idea del perché il mio codice non restituisce alcun dati?

Grazie per il vostro aiuto, Dave

risposta

12

mongoose saranno normalizzare il nome della raccolta in minuscolo e pluralzed. Pertanto, è necessario inserire in db.samplecollections anziché db.sampleCollection. (Si noti la differenza della lettera c e s qui).

per testarlo:

s = new sampleCollection({sampleField: 'hello'}); // creates a new record 
s.save(function(err) { 
    sampleCollection.find({ } , function (err, items) { 
     console.log(items); 
     console.log(err); 
     items.forEach(function(item) { 
      console.log(item); 
     }); 
    }); 
}); 

e stampa correttamente:

[ { sampleField: 'hello', _id: 4f28ab4cc9e58f710a000001 } ] 
null 
{ sampleField: 'hello', _id: 4f28ab4cc9e58f710a000001 } 

poi in guscio mongo:

> show collections 
samplecollections   //<<<<<<<<<<<<<< It's all lowercase and pluralized 
system.indexes 

> db.samplecollections.find() 
{ "sampleField" : "hello", "_id" : ObjectId("4f28ab4cc9e58f710a000001") } 
+1

+1 Anche pluralizza. sampleCollection -> samplecollections –

+1

@WesFreeman Oh, grazie, risposta aggiornata. – qiao

+2

Wow! Grazie per il tuo aiuto, questo ha senso ora. Perché mai la documentazione della mangusta non lo menziona? http://mongoosejs.com/ Sembra una grande lacuna nella documentazione ... –

3

Mentre questo è vero, è possibile specificare il nome di la raccolta nel terzo argomento e utilizzerà il caso da quella stringa:

var sampleCollection = mongoose.model('sampleCollection', sampleSchema,'SampleCollection'); 
Problemi correlati