Mongo 脚本始终连接到本地主机

Mongo Script always connects to localhost

我正在构建一个 MongoDB 数据库并在本地主机上进行。我一直在使用 JS 脚本来做这件事。我通过使用 var conn = new Mongo('localhost:27017') 启动我的脚本来测试本地主机上的数据库,一切正常。但是当我尝试 运行 mLab 实例的脚本时,使用:

var conn = new Mongo('mongodb://<dbuser>:<dbpassword>@ds115671.mlab.com:15671/finance_tracker')

(显然替换了用户名和密码),我得到的唯一输出是:

MongoDB shell version v3.4.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.2

然后我尝试使用 manual 中建议的主机和端口,然后使用 db.auth(),如下所示:

conn = new Mongo('ds115671.mlab.com:15671');
db = conn.getDB("finance_tracker");
db.auth(username, password);

我收到与之前相同的消息,指出我已连接到本地 mongo 实例。

如何编写我的脚本以便它在在线 Mongo 实例上执行?

编辑: 以下是脚本示例:

script.js

conn = new Mongo('ds115671.mlab.com:15671');
db = conn.getDB("finance_tracker");
db.auth('username', 'password');

db.users.insert({
    firstName: 'eddard',
    surname: 'stark',
    email: 'eddardstark@gmail.com',
    group: ObjectId()
});

var eddardstark = db.users.findOne({email:'eddardstark@gmail.com'});
var groupOneOid = eddardstark.group;

db.users.createIndex({email:1}, {unique: true});

db.users.insertMany([{
    userFirstName: 'catelyn',
    surname: 'tully',
    email: 'catelynstark@gmail.com',
    group: groupOneOid
}, {
    userFirstName: 'robb',
    surname: 'stark',
    email: 'robbstark@gmail.com',
    group: groupOneOid
}])

这是 运行 从命令行使用 mongo script.js

您是先通过 shell 连接到 mLab MongoDB 还是从您的计算机执行脚本?如果您正在 shelling 到 mLab,那么您已经连接并且您的脚本可以在不连接的情况下开始查询。如果您是 运行 您计算机上的脚本,那么工作示例如下所示:

var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://<dbuser>:<dbpassword>@ds115671.mlab.com:15671/finance_tracker', function(err, db) {
  console.log("Connected correctly to server");
  db.close();
});

您在控制台中看到了该输出,因为您正在使用

调用脚本
mongo script.js.

默认连接到本地主机。由于 JS 文件中的连接语句,您看不到它。

如果你想运行一个JS脚本在一个mongoshell到mlab。做这样的事情。

mongo ds115671.mlab.com:15671/finance_tracker -u <user> -p <password> script.js

这将连接到您的 mlab mongodb,然后 运行 您的脚本。 然后在你 script.js 中你可以有类似这样的语句。

db['users'].insert({'test': 'test'});

上面的示例会将文档插入到用户集合中。不确定你想在你的脚本中 运行 什么,所以我只写了一个我自己的例子。希望对您有所帮助。