Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mongoose always returning an empty array NodeJS

I have tried using find and findOne and both are not returning a document. find is returning an empty array while findOne is returning null. err in both cases in null as well.

Here is my connection:

function connectToDB(){
    mongoose.connect("mongodb://localhost/test"); //i have also tried 127.0.0.1
    db = mongoose.connection;
    db.on("error", console.error.bind(console, "connection error:"));
    db.once("open", function callback(){
        console.log("CONNECTED");
    });
};

Here is my schema:

var fileSchema = mongoose.Schema({
    hash: String,
    type: String,
    extension: String,
    size: String,
    uploaded: {type:Date, default:(Date.now)},
    expires: {type:Date, default:(Date.now()+oneDay)}
});
var Model = mongoose.model("Model", fileSchema);

And my query is here:

Model.find({},function(err, file) {
    console.log(err)
    console.log(file);  
});

I can upload things to the database and see them via RockMongo but I cannot fetch them after. This my first time using MongoDB so I think I'm just missing some of the fundamentals. Any push in the right direction would be great!

like image 427
locrizak Avatar asked Jan 06 '13 15:01

locrizak


2 Answers

The call to mongoose.model establishes the name of the collection the model is tied to, with the default being the pluralized, lower-cased model name. So with your code, that would be 'models'. To use the model with the files collection, change that line to:

var Model = mongoose.model("Model", fileSchema, "files");

or

var Model = mongoose.model("file", fileSchema);
like image 135
JohnnyHK Avatar answered Oct 17 '22 01:10

JohnnyHK


Simply inorder to avoid pluralization complexity use this:

var Model = mongoose.model("Model", fileSchema, "pure name your db collection");

It's very confusing.[at least for me.]

like image 3
Prageeth godage Avatar answered Oct 17 '22 01:10

Prageeth godage