'尝试使用Mongoose和嵌入式文档打开未关闭的连接'错误'

时间:2013-08-04 15:59:14

标签: connection mongoose runtime-error

定义过滤嵌入文档字段的静态查询时,我收到与连接相关的错误。 我试图将嵌入的文档分离到单独的模式文件中,但没有解决问题。有什么想法吗?

错误如下:

C:\development_GIT\myproject\app\models\mymodel.js:40
    this.find({ text.lang_code: langCode }).sort('text.name').exec(callback);
                        ^

Error: Trying to open unclosed connection.
    at NativeConnection.Connection.open (C:\development_GIT\myproject\node_
modules\mongoose\lib\connection.js:205:15)
    at Mongoose.connect (C:\development_GIT\myproject\node_modules\mongoose
\lib\index.js:156:15)
    at Object.<anonymous> (C:\development_GIT\myproject\server.js:13:10)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at repl:1:1

使用过滤器{ text.lang_code: langCode }时会启动错误  以下模型中的选项。如果我不使用嵌入式文档并尝试过滤例如{ _id: langCode },则不会抛出错误。

    //MyModel.js located at ./app/models

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;



     var MyModelSchema = new Schema({
      name: { type: String, trim: true },
      text: [{ name: String, lang_code: String }]

    });


    MyModelSchema .static({


      findByLangCode : function(langCode, callback) {

        this.find({ text.lang_code: langCode }).sort('text.name').exec(callback);

      }

    });

mongoose.model('MyModel', CategorySchema);

我的主文件server.js的第一行是:

//server.js
var express = require('express');
var env = process.env.NODE_ENV || 'development';
var config = require('./config/config')[env];
var mongoose = require('mongoose');
var fs = require('fs');
require('express-namespace');

mongoose.connect(config.db);

// Bootstrap models
fs.readdirSync(__dirname + '/app/models').forEach(function (file) {
  if (~file.indexOf('.js')) require(__dirname + '/app/models/' + file)
});

2 个答案:

答案 0 :(得分:0)

解决方案正在以不同的方式构建查询。似乎子文档不能在find()中使用。

Before: (not working)
this.find({ text.lang_code: langCode }).sort('text.name').exec(callback);

After (working)

this.find().where('text.lang_code').equals(langCode).sort('text.name').exec(callback);

答案 1 :(得分:0)

我一直在使用它,它对我来说很好。

this.find({ 'text.lang_code': langCode }).sort('text.name').exec(callback);

MongoDb只能处理一个lvl对象,但是如果你给它一个像.where函数那样的字符串,mongodb会做魔术并将它与子文档匹配:)