40

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!

2
  • What the name of the collection you're seeing documents in via RockMongo? Commented Jan 6, 2013 at 15:33
  • All the info is in a collection files under test Commented Jan 6, 2013 at 15:36

7 Answers 7

83

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);
Sign up to request clarification or add additional context in comments.

4 Comments

Saved the day. Thanks a lot! It's a pity this is not highlighted in the official guide.
@thameera same here. I'm moving into uncharted waters from .net land and I wasted so much time on this one. Lifesaver. Yea, convention does not seemed to be mentioned anywhere, at least in my search attempts. Thank you!!!
I found this out the hard way too -- that model("object",...) actually creates a collection called "objects". ORMs that are a bit too magical, but fortunately there's Stack Overflow!
3

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.]

Comments

1

Had kinda same problem. The solutions above didnt work for me. My app never returns error even if the query is not found. It returns empty array. So i put this in my code:

if(queryResult.length==0) return res.status(404).send("not found");

Comments

1

This issue is probably coming from the fact that you are creating a mongoose model without specifying the name of the collection.

Try changing : const Model = mongoose.model("Model", fileSchema);

To this : const Model = mongoose.model("Model", fileSchema, "NameOfCollection");

Comments

0
const growingUnit= mongoose.model('Growing Unit', growingUnitSchema);

I had a space in 'Growing Unit' on purpose and it always returned empty array. Removing that space to become 'GrowingUnit' was the fix needed in my scenario.

const growingUnit= mongoose.model('Growing Unit', growingUnitSchema);

Comments

0

General "hello world" issues (Sometimes this issue not related to mongoose).

  1. Check if the collection is not really empty (mongoDB atlas screenshot).

enter image description here

  1. Check for small spelling differences (Like listing instead of listings) in your collection queries commands.

  2. Check if you use the correct URI for your connection (For example you are trying to retrieve data from a collection that exists in localhost but use mongoDB cluster (Cloud) -or- any other issue related to Connection String URI). https://docs.mongodb.com/manual/reference/connection-string/

Comments

0

For me the issue was .skip(value), I was passing page=1 instead of page=0. As I was having few records, I was getting empty array always.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.