1

よろしくお願いします!

新しいプロジェクトでNode.js、MongoDB、Mongooseを使用してfind()おり、データベース内のドキュメントを試しているだけです。簡潔にするために、以下にマングースのコードを含めます(とにかく今はこれ以上のことはしていません):

var mongoose = require('mongoose');

mongoose.connect('mongodb://<username>:<password>@<sub-domain>.mongolab.com:<port>/<db>');

var schema = { email_address: String, invite: String }
  , Users = mongoose.model('Users', new mongoose.Schema(schema));

console.log(Users.findOne({ 'email_address': 'jonathon@foo.bar' }, function(err, doc) { return doc; }));

Node.jsコンソール(ターミナル)に返されたものをエコーするだけでよいと確信してdocいますが、代わりに次のようになります。

{ options: { populate: {} },
  safe: undefined,
  _conditions: { email_address: 'jonathon@foo.bar' },
  _updateArg: {},
  _fields: undefined,
  op: 'findOne',
  model: 
   { [Function: model]
     modelName: 'Users',
     model: [Function: model],
     options: undefined,
     db: 
      { base: [Object],
        collections: [Object],
        models: {},
        replica: false,
        hosts: null,
        host: '<sub-domain>.mongolab.com',
        port: <port>,
        user: '<username>',
        pass: '<password>',
        name: '<db>',
        options: [Object],
        _readyState: 2,
        _closeCalled: false,
        _hasOpened: false,
        db: [Object] },
     schema: 
      { paths: [Object],
        subpaths: {},
        virtuals: [Object],
        nested: {},
        inherits: {},
        callQueue: [],
        _indexes: [],
        methods: {},
        statics: {},
        tree: [Object],
        _requiredpaths: undefined,
        options: [Object] },
     collection: 
      { collection: null,
        name: 'users',
        conn: [Object],
        buffer: true,
        queue: [Object],
        opts: {} },
     base: 
      { connections: [Object],
        plugins: [],
        models: [Object],
        modelSchemas: [Object],
        options: {},
        Collection: [Function: NativeCollection],
        Connection: [Function: NativeConnection],
        version: '3.5.4',
        Mongoose: [Function: Mongoose],
        Schema: [Object],
        SchemaType: [Object],
        SchemaTypes: [Object],
        VirtualType: [Function: VirtualType],
        Types: [Object],
        Query: [Object],
        Promise: [Function: Promise],
        Model: [Object],
        Document: [Object],
        Error: [Object],
        mongo: [Object] } } }

明らかに、私は実際のクレデンシャルを<username>ビットで難読化したばかりです。これらはすべて私のコードで正しいものです。

findOneデータベースには、条件に一致するドキュメントが含まれていますが、メソッドから条件を削除しても結果は得られません。

私はNode.jsにかなり慣れていないので、あなたの答えを説明できるので、次回はそれが大きな助けになることを知っています!ありがとう!

4

2 に答える 2

4

コードを次のように変更します。

Users.findOne({ 'email_address': 'jonathon@foo.bar' }, function(err, doc) {
 console.log(doc); 
});

あなたのコードからはわかりませんが、マングース関数の値をコンソールに書き込んでいると思います...

于 2013-01-12T01:12:20.827 に答える
2

console.log(Users.findOne({ 'email_address': 'jonathon@foo.bar' }, function(err, doc) { return doc; }));Node.jsは非同期であるため、DBからドキュメントが返されていなくても、実際に行がコンソールにエコーされていることを完全に忘れています。

代わりに、console.logメソッドはfindのコールバック内にある必要があります。

Users.find({}, function(err, doc) { console.log(doc); });
于 2013-01-12T01:13:14.267 に答える