【发布时间】:2016-02-13 23:01:00
【问题描述】:
第 3 方节点模块,在 localhost 上创建和填充 mongoDB 数据库。我正在尝试使用数据库并从我的自定义模块中检索数据。即使我可以成功连接到数据库,它也没有显示数据库中的集合或文档。
我对 Mongoose 文档的印象,首先我必须创建模式,然后为我想要使用的每个集合创建 mongoDB 模型。这些模型是在第 3 方模块中创建的,并且我想使用的集合已经存在于数据库中。
如您所知,我是这个 mongodb+mongoose+nodejs 堆栈的新手。我在新模块中创建模式和模型是对的吗 - 这是很多代码重复?还是我遗漏了什么?
我在 mongo shell 中执行use gtfs 然后show collections 以确认 gtfs 数据库不为空。
> use gtfs
switched to db gtfs
> show collections
agencies
routes
...
然后确认数据库中也有文档,
> db.routes.find({'route_id':'6182'}).pretty()
{
"_id" : ObjectId("562fcf97090e937d06a34e67"),
"route_id" : "6182",
"agency_id" : "DDOT",
...
}
我从自定义模块连接到数据库:
var mongoose = require('mongoose');
var mongo_url = 'mongodb://127.0.0.1:27017/gtfs';
//Each connection instance maps to a single database
var db = mongoose.createConnection(mongo_url);
console.log('db -> ', db);
我在 mongoose 文档中读到,当您创建连接时,mongoose 会将您的连接对象定向到 open 或 openSet 方法。所以,我知道我的问题不是创建数据库连接对象而是打开它。
当我打印出 db 对象时,它显示集合属性为空:
db -> { connections:
[ { base: [Circular],
collections: {},
models: {},
config: [Object],
replica: false,
hosts: null,
host: 'localhost',
port: 27017,
user: undefined,
pass: undefined,
name: 'gtfs',
options: [Object],
otherDbs: [],
_readyState: 2,
_closeCalled: false,
_hasOpened: false,
_listening: false,
_events: {},
db: [Object] } ],
plugins: [],
models: {},
modelSchemas: {},
options: { pluralization: true } }
【问题讨论】:
-
您是打算只查询数据库中的数据,还是专门使用像 Mongoose 这样的对象建模库?
-
首先查询数据,然后创建一个新的集合并插入带有查询结果的文档。我正在使用 Mongoose,因为我使用的第 3 方也在使用 Mongoose。它只是给了我一个起点。而且我不知道如何在 javascript 文件中运行 mongo 命令。
标签: javascript node.js mongodb mongoose