2012-02-01 16 views
8

Estoy intentando crear un sencillo programa de ejemplo de MongooseJS que obtiene una lista de elementos de una colección, y vuelve vacía cada vez. Aquí está el código:Mongoose JS consulta todas las que vuelven nulas o vacías

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 
    }); 
}); 

Tengo una instancia predeterminada de MongoDB correr, y esto es lo que he entrado en la cáscara:

> 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" } 

Cualquier idea de por qué mi código no devuelve ningún ¿datos?

Gracias por su ayuda, de Dave

Respuesta

12

mongoose se normalizarán el nombre de la colección a minúsculas y pluralzed. Por lo tanto, debe insertarlo en db.samplecollections en lugar de db.sampleCollection. (Observe la diferencia de la letra c y s aquí).

para probarlo:

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); 
     }); 
    }); 
}); 

y correctamente imprime:

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

después en consola mongo:

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

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

+1 También pluraliza. sampleCollection -> samplecollections –

+1

@WesFreeman Oh, gracias, respuesta actualizada. – qiao

+2

¡Guau! Gracias por su ayuda, eso tiene sentido ahora. ¿Por qué la documentación de la mangosta no menciona eso? http://mongoosejs.com/ Parece una gran brecha en la documentación ... –

3

Si bien esto es cierto, se puede especificar el nombre de la colección en el tercer argumento y usará el caso de esa cadena:

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