Node.js, 快递, Mongodb using monk database empty
Node.js, Express, Mongodb using monk database empty
我在 node.js 中使用 mongodb 数据库和 monk 中的教程时遇到问题。当我在 mongo 控制台中 运行 我的数据库命令时,我可以看到我的数据库 nodetest1 有 3 个条目,但是当我这样做时 returns 什么都没有。
router.get('/', function(req, res, next) {
var db = req.db;
var collection = db.get('usercollection');
collection.find({},{},function(e,docs){
res.send(docs);
});
});
这是我使用 find 方法时 mongo 控制台的打印结果。
> db.usercollection.find().pretty()
{
"_id" : ObjectId("55b17a551efb190c06c38d31"),
"username" : "testuser1",
"email" : "testuser1@testdomain.com"
}
{
"_id" : ObjectId("55b17a5f1efb190c06c38d32"),
"username" : "testuser2",
"email" : "testuser2@testdomain.com"
}
{
"_id" : ObjectId("55b17a5f1efb190c06c38d33"),
"username" : "testuser3",
"email" : "testuser3@testdomain.com"
}
如果您需要更多信息,我会提供给您。我希望你能帮助我,我已经在这个问题上停留了 45 分钟试图找到解决方案。
更新:
这就是 mongod
的启动方式
mongod --dbpath "C:\Users\Victor\OneDrive\Programming\NodeJS\DatabaseSetup\data"
我与数据库的连接在 app.js:
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/DatabaseSetup');
app.use(function(req,res,next){
req.db = db;
next();
});
当我 运行 我的程序位于 localhost:3000/userlist 时,我没有从数据库中获取任何数据,但控制台会这样写:
2015-07-24T03:13:28.127+0200 I NETWORK [initandlisten] connection accepted from 127.0.0.1:57961 #151 (6 connections now open)
根据您在上面列出的信息,我认为数据库连接字符串并不像您认为的那样工作。
你自己说你正在启动 mongod
服务器的实例,如下所示:
mongod --dbpath "C:\Users\Victor\OneDrive\Programming\NodeJS\DatabaseSetup\data"
然后您可以连接到shell,即:
mongo
一切都很好。
这里的问题是你实际上默认连接的 "database" 没有其他声明被称为 "test" 而不是你存储物理数据文件的路径名称.
因此,要将 monk 连接到该数据,请执行以下操作:
var db = require('monk')('localhost/test');
连接到与存储数据的数据库名称相同的数据库。
如果您想创建不同的数据库名称,请执行以下操作:
mongo
> use DatabaseSetup
或仅从命令行:
mongo DatabaseSetup
无论哪种情况,这都会切换包含的默认数据库。然后您可以在该名称空间中创建数据。
但除此之外,您的数据可能驻留在 "test" 中,因此您应该使用它。
只需重读那里的第一句话。也许数据库容器名称是 "nodetest1" ,因为那是你所说的,因此:
var db = require('monk')('localhost/nodetest1');
我在 node.js 中使用 mongodb 数据库和 monk 中的教程时遇到问题。当我在 mongo 控制台中 运行 我的数据库命令时,我可以看到我的数据库 nodetest1 有 3 个条目,但是当我这样做时 returns 什么都没有。
router.get('/', function(req, res, next) {
var db = req.db;
var collection = db.get('usercollection');
collection.find({},{},function(e,docs){
res.send(docs);
});
});
这是我使用 find 方法时 mongo 控制台的打印结果。
> db.usercollection.find().pretty()
{
"_id" : ObjectId("55b17a551efb190c06c38d31"),
"username" : "testuser1",
"email" : "testuser1@testdomain.com"
}
{
"_id" : ObjectId("55b17a5f1efb190c06c38d32"),
"username" : "testuser2",
"email" : "testuser2@testdomain.com"
}
{
"_id" : ObjectId("55b17a5f1efb190c06c38d33"),
"username" : "testuser3",
"email" : "testuser3@testdomain.com"
}
如果您需要更多信息,我会提供给您。我希望你能帮助我,我已经在这个问题上停留了 45 分钟试图找到解决方案。
更新: 这就是 mongod
的启动方式mongod --dbpath "C:\Users\Victor\OneDrive\Programming\NodeJS\DatabaseSetup\data"
我与数据库的连接在 app.js:
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/DatabaseSetup');
app.use(function(req,res,next){
req.db = db;
next();
});
当我 运行 我的程序位于 localhost:3000/userlist 时,我没有从数据库中获取任何数据,但控制台会这样写:
2015-07-24T03:13:28.127+0200 I NETWORK [initandlisten] connection accepted from 127.0.0.1:57961 #151 (6 connections now open)
根据您在上面列出的信息,我认为数据库连接字符串并不像您认为的那样工作。
你自己说你正在启动 mongod
服务器的实例,如下所示:
mongod --dbpath "C:\Users\Victor\OneDrive\Programming\NodeJS\DatabaseSetup\data"
然后您可以连接到shell,即:
mongo
一切都很好。
这里的问题是你实际上默认连接的 "database" 没有其他声明被称为 "test" 而不是你存储物理数据文件的路径名称.
因此,要将 monk 连接到该数据,请执行以下操作:
var db = require('monk')('localhost/test');
连接到与存储数据的数据库名称相同的数据库。
如果您想创建不同的数据库名称,请执行以下操作:
mongo
> use DatabaseSetup
或仅从命令行:
mongo DatabaseSetup
无论哪种情况,这都会切换包含的默认数据库。然后您可以在该名称空间中创建数据。
但除此之外,您的数据可能驻留在 "test" 中,因此您应该使用它。
只需重读那里的第一句话。也许数据库容器名称是 "nodetest1" ,因为那是你所说的,因此:
var db = require('monk')('localhost/nodetest1');