当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用Mongoose访问预先存在的集合?》经验,为你挑选了5个好方法。

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

我的问题是,如何访问这个已经存在的数据集而不是在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

小智.. 232

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

我可以在文档中找到这些信息吗?这确实有所帮助,但没有解释复数的地方. (9认同)

同样在这里,我花了很多时间搞清楚这个问题,这里的文件是http://mongoosejs.com/docs/guide.html#collection (6认同)

这对我有用.我有一个用户集合,我在那里进行了moreorestored.为了使用mongoose访问它,我做了`mongoose.connect("mongodb:// localhost/fromlab"); var Schema = mongoose.Schema; var User = mongoose.model("User",new Schema({}),"users"); User.find({},function(err,doc){console.log((doc))})` (3认同)


Michael Tauf.. 58

如果有人只想要一个简单的复制粘贴插件功能,那么这就是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 } ]


Leo Ribeiro.. 20

你可以做这样的事情,而不是你将访问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
        })
    });

});


Will Nathan.. 15

我有同样的问题,并能够使用现有的Mongoose连接和下面的代码运行无模式查询.我添加了一个简单的约束'a = b'来显示你要添加这样一个约束的位置:

var action = function (err, collection) {
    // Locate all the entries using find
    collection.find({'a':'b'}).toArray(function(err, results) {
        /* whatever you want to do with the results in node such as the following
             res.render('home', {
                 'title': 'MyTitle',
                 'data': results
             });
        */
    });
};

mongoose.connection.db.collection('question', action);


busticated.. 7

你确定你已连接到数据库吗?(我问,因为我没有看到指定的端口)

尝试:

mongoose.connection.on("open", function(){
  console.log("mongodb is connected!!");
});

此外,您可以在mongo shell中执行"show collections"以查看数据库中的集合 - 也许尝试通过mongoose添加记录并查看它最终的位置?

从连接字符串的外观来看,您应该在"test"db中看到记录.

希望能帮助到你!



1> 小智..:

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


我可以在文档中找到这些信息吗?这确实有所帮助,但没有解释复数的地方.
同样在这里,我花了很多时间搞清楚这个问题,这里的文件是http://mongoosejs.com/docs/guide.html#collection
这对我有用.我有一个用户集合,我在那里进行了moreorestored.为了使用mongoose访问它,我做了`mongoose.connect("mongodb:// localhost/fromlab"); var Schema = mongoose.Schema; var User = mongoose.model("User",new Schema({}),"users"); User.find({},function(err,doc){console.log((doc))})`

2> Michael Tauf..:

如果有人只想要一个简单的复制粘贴插件功能,那么这就是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 } ]



3> Leo Ribeiro..:

你可以做这样的事情,而不是你将访问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
        })
    });

});



4> Will Nathan..:

我有同样的问题,并能够使用现有的Mongoose连接和下面的代码运行无模式查询.我添加了一个简单的约束'a = b'来显示你要添加这样一个约束的位置:

var action = function (err, collection) {
    // Locate all the entries using find
    collection.find({'a':'b'}).toArray(function(err, results) {
        /* whatever you want to do with the results in node such as the following
             res.render('home', {
                 'title': 'MyTitle',
                 'data': results
             });
        */
    });
};

mongoose.connection.db.collection('question', action);



5> busticated..:

你确定你已连接到数据库吗?(我问,因为我没有看到指定的端口)

尝试:

mongoose.connection.on("open", function(){
  console.log("mongodb is connected!!");
});

此外,您可以在mongo shell中执行"show collections"以查看数据库中的集合 - 也许尝试通过mongoose添加记录并查看它最终的位置?

从连接字符串的外观来看,您应该在"test"db中看到记录.

希望能帮助到你!


有趣的是,当我试图访问的数据在`question`集合中时,它实际上将信息存储在`questions`集合中.Mongoose会自动复制集合/模型名称吗?
推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有