如何通过mongojs模块从nodejs查询mongodb? (服务器是openshift)

时间:2014-08-31 18:07:35

标签: node.js mongodb openshift mongojs

我在openshift上尝试使用mongodb和nodejs,使用mongojs在nodejs和mongodb之间进行接口。

在mongoshell中我运行了“use nodejs”并定义了一个“得分”集合。我在其中保存了一些数据并正确显示。

在nodeserver的app.js文件中 我有

self.routes['/db'] = function(req, res) {
var db = require("./db");
        db.scores.find(function(err,docs){res.send(docs);});        
    };

在db.js文件中我有

var dbName = "/nodejs";
var databaseUrl = process.env.OPENSHIFT_MONGODB_DB_USERNAME + ":" +  process.env.OPENSHIFT_MONGODB_DB_PASSWORD + "@" + process.env.OPENSHIFT_MONGODB_DB_HOST + ":" +  process.env.OPENSHIFT_MONGODB_DB_PORT+ dbName;
// "username:password@example.com/mydb"
var collections = ["scores"]
var db = require("mongojs").connect(databaseUrl, collections);
module.exports = db;

当我访问url mydomain.com/db

时,我无法获取任何数据

有人可以指出我做错了什么。数据库正在连接。我无法从乐谱收集中找到所有内容。

self.routes['/db'] = function(req, res) {
    var db = require("./db");
    db.scores.find(function(err,docs){res.send(docs);});        
};

5 个答案:

答案 0 :(得分:1)

我认为您应该使用收集方法来使用您的乐谱集合。如下所示:

db.collection('scores').find(function(err,docs){res.send(docs);});

或者使用toArray函数确保检索对象数组。

db.collection('scores').find().toArray(function(err, docs) {
    console.dir(docs);
    res.send(docs)
}

答案 1 :(得分:1)

  

这是我们连接到MongoDB服务器的方式:

//app.js
var databaseUrl = "mydb"; // "username:password@example.com/mydb"
var collections = ["users"]
var db = require("mongojs").connect(databaseUrl, collections);



 db.users.find({email: "abcd@gmail.com"}, function(err, users) {
  if( err || !users) console.log("No female users found");
  else users.forEach( function(femaleUser) {
    console.log(femaleUser);
  } );
});

答案 2 :(得分:0)

我保存在单独文件中的数据库连接配置导致错误。这个配置工作,我能够获取数据库条目。使用注释掉的块或下面的代码。两者都做同样的事情。只需为尝试使用openshift的人发布此答案。

self.routes['/db'] = function(req, res) {
        var dbName = "/nodejs";
        var connection_string = process.env.OPENSHIFT_MONGODB_DB_USERNAME + ":" +  process.env.OPENSHIFT_MONGODB_DB_PASSWORD + "@" + process.env.OPENSHIFT_MONGODB_DB_HOST + ":" +  process.env.OPENSHIFT_MONGODB_DB_PORT + dbName;
        var db = mongojs(connection_string);

        /*
        var b = db.collection('books');    
        db.b.find(function(err, docs) {
           res.send(docs); 
        });*/
        db.collection('books').find(function(err,docs){
            res.send(docs);
        });
    };

nodejs是用于其中的集合" books"存储。 定义var mongojs = require(' mongojs');在声明所有变量的最顶层,尽管如果在使用mongojs变量之前声明它并不重要。

答案 3 :(得分:0)

使用MongoClient。

//test is the database and students is the collection inside test.
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {
    console.log("Successfully connected to MongoDB ");
    var cursor = db.collection('students').find({});

    cursor.forEach(
        function(doc) {
           console.log("JSON doc: "+doc);
        },
        function(err) {
            console.log("Error");
            return db.close();
        }
    );

});

答案 4 :(得分:0)

您可以在Node中使用以下代码连接到MongoDB集合并将结果作为数组返回。

const MongoClient = require('mongodb').MongoClient;
const credentials = require("../credentials.js");

const dbUrl = 'mongodb://' + credentials.username +
    ':' + credentials.password + '@' + credentials.host + ':' + credentials.port + '/' + credentials.database;

MongoClient.connect(dbUrl, (err, client) => {
    if (err) throw err;
    console.log('Successfully connected');

    let collection = client.db(credentials.database).collection('products');

    collection.find({}).toArray((err, docs) => {
        console.log(docs);
        client.close();
    });
});

这是MongoDB连接的凭据.js文件

module.exports = {
    host:     'localhost',
    port:       '27017',
    username: 'user',
    password: 'secret',
    database: 'your_db'
}