【问题标题】:Strange response when finding documents in MongoDB using Mongoose in Node.js使用 Node.js 中的 Mongoose 在 MongoDB 中查找文档时出现奇怪的响应
【发布时间】:2013-01-12 09:13:14
【问题描述】:

在此先感谢您的帮助,非常感谢!

我在一个新项目中使用 Node.js、MongoDB 和 Mongoose,我只是想find() 数据库中的文档。为简洁起见,我将只包含下面的 Mongoose 代码(反正我现在做的不多):

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; }));

我很确定应该只是将返回的 doc 回显到 Node.js 控制台(终端),但我却得到了这个:

{ 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] } } }

显然我只是用&lt;username&gt; 位混淆了我的真实凭据,它们在我的代码中都是正确的。

尽管从findOne 方法中删除条件不会产生任何结果,但数据库中确实有一个与条件匹配的文档!

我是 Node.js 的新手,所以我可以解释一下你的答案,这样我知道下次它会很有帮助!谢谢!

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    将您的代码更改为:

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

    我从你的代码看不到,但我认为你正在将 mongoose 函数的值写入控制台...

    【讨论】:

      【解决方案2】:

      我完全忘记了,Node.js 是异步的,所以 console.log(Users.findOne({ 'email_address': 'jonathon@foo.bar' }, function(err, doc) { return doc; })); 行确实回显到控制台,尽管数据库尚未返回任何文档!

      相反,console.log 方法应该在 find 的回调中,例如:

      Users.find({}, function(err, doc) { console.log(doc); });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-02
        • 1970-01-01
        • 2022-10-06
        • 1970-01-01
        • 2013-09-08
        • 2013-02-06
        • 2011-08-11
        相关资源
        最近更新 更多