web-dev-qa-db-ja.com

mongooseを使用してMongoDbからデータを取得するにはどうすればよいですか?

MongoDBとmongooseを学び始めたところです。現在、私は次の構造を持っています:

_database   -> skeletonDatabase
collection -> adminLogin
_

コマンドラインからdb.adminLogin.find()を実行すると、次のようになります。

_{ "_id" : ObjectId("52lhafkjasfadsfea"), "username" : "xxxx", "password" : "xxxx" }
_

私の接続(これは機能します。参考までに追加するだけです)

_module.exports = function(mongoose)
{
    mongoose.connect('mongodb://localhost/skeletonDatabase');

    var db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', function callback () {
        console.log('Conntected To Mongo Database');
    });
}
_

私の-js-

_module.exports = function(mongoose)
{
    var Schema = mongoose.Schema;

    // login schema
    var adminLogin = new Schema({
        username: String,
        password: String
    });

    var adminLoginModel = mongoose.model('adminLogin', adminLogin);
    var adminLogin = mongoose.model("adminLogin");

    adminLogin.find({}, function(err, data){
        console.log(">>>> " + data );
    });
}
_

私のconsole.log()は_>>>>_として返されます

だから私はここで何が間違っているのですか?コンソールログにデータが記録されないのはなぜですか?助けてくれてありがとう。

9
Kris Hollenbeck

mongooseはデフォルトで単一のモデル名を取り、それらを複数の名前のコレクションとペアにします。そのため、mongooseはデータベースで「adminLogins」という存在しないコレクションを探しています。スキーマを定義するときに、コレクション名を2番目の引数として指定できます。

var adminLogin = new Schema({
    username: String,
    password: String
}, {collection: 'adminLogin'});
23
Peter Lyons

最初にコンパイルするだけですoneスキーマを引数としてモデル

var adminLogin = mongoose.model('adminLogin', adminLogin);

コードにadminLoginは存在しませんが、adminLoginModelは存在します。

その後、代わりに

adminLogin.find({}, function(err, data){
        console.log(">>>> " + data );
    });

これを試して

adminLogin.find(function (err, adminLogins) {
  if (err) return console.error(err);
  console.log(adminLogins);

mongoはモデルの複数形を使用してコレクションに名前を付けるため、「s」は重要です。英語で申し訳ありません。

1
elkhrz

APIの高速ルート内に挿入する際に問題が発生したため、@ elkhrzのおかげで、最初にスキーマを定義し、次にその1つのモデルをコンパイルして、次のようにプルすることで変更しました。

app.get('/lists/stored-api', (req, res) => {

    Apis.find(function(err, apis) {

        if (err) return console.error(err);

        res.send(apis);

    });

});

私はそれを本体に送信しません。特にAPIを本番ベースのアプリケーションにすることを計画している場合は、実際に何か他のことをします。

この問題を実行し、データをレンダリングするための適切な方法を確認してください。 Expressでルート間でデータを渡す方法

データを処理するときは、常に安全な手順を実行することをお勧めします。