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

问题描述 投票:1回答:5

我在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:[email protected]/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);});        
};
node.js mongodb openshift mongojs
5个回答
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
投票

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

//app.js
var databaseUrl = "mydb"; // "username:[email protected]/mydb"
var collections = ["users"]
var db = require("mongojs").connect(databaseUrl, collections);



 db.users.find({email: "[email protected]"}, function(err, users) {
  if( err || !users) console.log("No female users found");
  else users.forEach( function(femaleUser) {
    console.log(femaleUser);
  } );
});

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变量之前声明它是无关紧要的。


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();
        }
    );

});

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连接的credentials.js文件

module.exports = {
    host:     'localhost',
    port:       '27017',
    username: 'user',
    password: 'secret',
    database: 'your_db'
}
© www.soinside.com 2019 - 2024. All rights reserved.