如何使用 Mongoose 访问预先存在的集合?

新手上路,请多包涵

我在数据库中有大量 300 question 对象 test 。我可以通过 MongoDB 的交互式 shell 轻松地与这个集合进行交互;但是,当我尝试在 express.js 应用程序中通过 Mongoose 获取集合时,我得到一个空数组。

我的问题是,我怎样才能访问这个已经存在的数据集而不是快速重新创建它?这是一些代码:

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

mongoose.connect('mongodb://localhost/test');
mongoose.model('question', new Schema({ url: String, text: String, id: Number }));

var questions = mongoose.model('question');
questions.find({}, function(err, data) { console.log(err, data, data.length); });

这输出:

 null [] 0

原文由 theabraham 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 644
2 个回答

Mongoose 添加了在模式下指定集合名称的功能,或者在声明模型时作为第三个参数。否则,它将使用您映射到模型的名称给出的复数版本。

尝试以下类似的方法,或者模式映射:

 new Schema({ url: String, text: String, id: Number},
           { collection : 'question' });   // collection name

或模型映射:

 mongoose.model('Question',
               new Schema({ url: String, text: String, id: Number}),
               'question');     // collection name

原文由 calvinfo 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果有人只想要一个简单的复制粘贴插件功能,那么这里是 Will Nathan 的答案的抽象:

 function find (name, query, cb) {
    mongoose.connection.db.collection(name, function (err, collection) {
       collection.find(query).toArray(cb);
   });
}

只需执行 find(collection_name, query, callback); 即可获得结果。

例如,如果我在集合 ‘foo’ 中有一个文档 { a : 1 } 并且我想列出它的属性,我会这样做:

 find('foo', {a : 1}, function (err, docs) {
            console.dir(docs);
        });
//output: [ { _id: 4e22118fb83406f66a159da5, a: 1 } ]

原文由 Michael Taufen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题