我在一个数据库test
中有一个包含300个question
对象的大型集合。我可以通过MongoDB的交互式shell轻松地与这个集合进行交互;但是,当我试图在express.js应用程序中通过Mongoose获取这个集合时,我得到了一个空数组。
我的问题是,我如何访问这个已经存在的数据集,而不是在express中重新创建它?下面是一些代码:
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
发布于 2011-11-03 23:21:05
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
发布于 2011-07-17 09:12:32
如果任何人只是想要一个简单的复制粘贴插件功能,下面是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 } ]
发布于 2016-10-25 09:28:50
你可以这样做,然后你就可以访问mongoose中的原生mongodb函数了:
var mongoose = require("mongoose");
mongoose.connect('mongodb://localhost/local');
var connection = mongoose.connection;
connection.on('error', console.error.bind(console, 'connection error:'));
connection.once('open', function () {
connection.db.collection("YourCollectionName", function(err, collection){
collection.find({}).toArray(function(err, data){
console.log(data); // it will print your collection data
})
});
});
https://stackoverflow.com/questions/5794834
复制相似问题