2014-04-16 24 views
9

Ich habe eine Route eingerichtet, dass ein Modell verwendet, wie unten genannt Todo:Mungo finden() nicht Ergebnis der Rückkehr

app.get('/api/todos', function(req, res) { 
    Todo.find({},function(err, todos) { 
     if (err) 
      res.send(err); 
     console.log("number of todos " + todos.length); 
     res.json(todos); // return all todos in JSON format 
    }); 
}); 

jedoch todos.length ist immer 0, da es keine Ergebnisse finden sich nicht. Wenn ich laufen:

use test3 
db.Todo.find() 

Ich bin sicher, dass ich auf die gleiche db angeschlossen haben. Ich kann die Verbindung in Mongod Konsole sehen. Meine Verbindung ist innerhalb config/db.js Datei:

module.exports = { 
    url : 'mongodb://localhost/test3' 
} 

Die Verbindung in meinem server.js wie folgt:

var db = require('./config/db'); 
mongoose.connect(db.url); 

in Mongo Shell bekomme ich 1 Ergebnis. Ich erwarte, dass dieses Ergebnis von der Suchabfrage zurückgegeben wird. Gibt es etwas, was ich verpasst habe? Ich bin mit Mongoose 3.6

Prost

+1

Sind Sie sicher, dass Sie sich mit der gleichen Datenbank in Ihrem Programm verbinden wie mit der Shell? Fügen Sie Ihren Datenbankverbindungscode und ein Beispiel Ihrer Verbindung mit der Shell zu Ihrer Frage hinzu, wenn Sie sich nicht sicher sind. –

+0

Ich habe einige weitere Informationen hinzugefügt, die Sie angefordert haben – user3539643

+0

Beachten Sie auch, dass Mungo den Modellnamen standardmäßig pluralisiert und konvertiert dies in Kleinbuchstaben und andere Regeln. Also, wenn Sie dies nicht übersteuern, sucht Mungo nach einer Sammlung namens "Todos", die möglicherweise nicht existiert. –

Antwort

35

Also, was sehr viel sieht aus wie ist, dass Sie bereits Sammlungen in einer bestehenden Datenbank und jetzt versuchen Sie, diese mit Mungo Modelle zugreifen erstellt haben.

Das Problem ist, dass Mungo einige Standardeinstellungen verwendet, die Ihnen vielleicht nicht bewusst sind, also ist das Beispiel, das Sie aus der Shell zeigen, nicht dasselbe wie das, was Mungo standardmäßig macht.

So können Sie entweder Ihre Sammlungen umbenennen, um zu entsprechen, was Mungo standardmäßig erwartet, oder ändern, was Mungo macht, um Ihren vorhandenen Namen zu entsprechen. Im letzteren Fall definieren Sie direkt die Modellnamen wie so:

mongoose.model("Todo", toDoSchema, "Todo"); 

So das dritte Argument der method gibt tatsächlich die expliziten Namen für die Sammlung zu verwenden. Ohne dies wird der angenommene Name unter den Standardregeln "Todos" sein.

Verwenden Sie eine der beiden Methoden, damit sie übereinstimmen.

+0

Gerettete 3-4 Stunden meines Lebens. :) – BangOperator

+0

Brilliant :): D –

+0

Ich konfrontiert ähnliches Problem für 2 Stunden, ich musste "s" nach dem Namen meiner Sammlung, omg ... TY hinzufügen – PayteR