Reputation: 12279
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!
Upvotes: 39
Views: 34741
Reputation: 16820
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.
Upvotes: 0
Reputation: 7781
General "hello world" issues (Sometimes this issue not related to mongoose).
Check for small spelling differences (Like listing
instead of listings
) in your collection queries commands.
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/
Upvotes: 0
Reputation: 1111
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");
Upvotes: 1
Reputation: 161
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);
Upvotes: 0
Reputation: 88
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");
Upvotes: 1
Reputation: 4574
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.]
Upvotes: 3
Reputation: 312139
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);
Upvotes: 83