0

正しく挿入されたと思われる mongodb コレクションからデータを取得できません。

だからここに私のコード例があります...

var db = require('./database');

module.exports = function (app) {
    app.get('/db', function (req, res) {
        db.collection('myCollection', function (err, myCollection) {
            if (err) {
                return console.error(err);
            }

            var docrow = {
                // no id specified, we'll let mongodb handle that
                name: 'Mark',
                date: '2013/09/11',
                description: 'Some text here'
            };

            console.log('I GET HERE OK');

            myCollection.insert(docrow, { safe: true }, function (err, insertedDocument) {
                console.log('BUT I DONT GET HERE?');

                if (err && err.name === 'MongoError' && err.code === 11000) {
                    return console.log('This document already exists');
                } else if (err) {
                    return console.log('Something bad happened');
                }

                myCollection.find({ name: 'Mark' }, function (err, docs) {
                    docs.each(function (err, doc) {
                        console.log(doc);
                    });
                });
            });


            res.end('OK we made it');
        });
    });
};

...そして、database.js ファイルは...

var Db         = require('mongodb').Db,
    Connection = require('mongodb').Connection,
    Server     = require('mongodb').Server;

var host = process.env['MONGO_NODE_DRIVER_HOST'] != null ? process.env['MONGO_NODE_DRIVER_HOST'] : 'localhost';
var port = process.env['MONGO_NODE_DRIVER_PORT'] != null ? process.env['MONGO_NODE_DRIVER_PORT'] : Connection.DEFAULT_PORT;

/*
    w:1 tells mongo to wait until at least one confirmed write has succeeded before calling any callbacks
 */
var flags = { w: 1 };
var server = new Server(host, port, { auto_reconnect: true, poolSize: 20 });
var db = new Db('TestDBName', server, flags);

module.exports = db;

エラーなしで Collection ( ) を作成できるように見えます。また、コレクションmyCollectionを呼び出しinsertてもエラーは発生しませんが、コールバック関数の近くでエラーまたはエラーをトリガーするようには見えません成功を処理しますか?

ここで何が間違っていますか?

あなたが私に与えることができるどんな助けにも感謝します.

4

1 に答える 1

1

mongodb に接続すると、それは非同期メソッドであるため、コールバックでクライアント ハンドラーが返されます。このclientハンドラーは、その Db オブジェクトのハンドルの代わりに使用する必要があります。したがって、これを変更します。

var db = new Db('TestDBName', server, flags);

これに:

new Db('TestDBName', server, flags).open(function(err, client) {
  if(err) throw err;

  // client - is the guy you are looking for instead of `db` you had
});

同様に変更します:

myCollection.find({ name: 'Mark' }, function (err, docs) {

に:

myCollection.find({ name: 'Mark' }).toArray(function (err, docs) {

.toArrayこれは、直接コールバックの代わりに使用する必要がある mongo-native の唯一の例外です。

于 2013-09-11T15:12:43.967 に答える