使用Node.js在MongoLab MongoDB数据库中创建集合模式

11

我刚接触node.js和mongodb。

我试图使用以下代码在mongolab mongodb数据库中从node.js应用程序创建一个用户集合的模式。没有看到任何指示它成功,也没有报错信息,但是当我去mongolab查看我的数据库时,我没有看到任何模式被创建 - https://dzwonsemrish7.cloudfront.net/items/01263Y1c312s233V0R17/mongodb-schema.png?v=7fdc20e3

有人能解释一下我可能做错了什么,或者如何验证我的代码是否成功,并且实际上为我的集合创建了一个模式吗?

// file: app.js

var express = require('express'),
    http = require('http'),
    mongoose = require('mongoose');

var app = express(),
    port = 3000;

// Connect to database in the cloud (mongolab)
mongoose.connect('mongodb://username:password@ds041344.mongolab.com:41344/stockmarket');

// Create a schema for User collection
mongoose.connection.on('open', function () {
    console.log(">>> Connected!");

    var UserSchema = new mongoose.Schema({
        username: {type: String, unique: true},
        password: String
    });

    var UserModel = mongoose.model('User', UserSchema);
});

app.get('/', function(req, res){
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello, World!\n');
});

http.createServer(app).listen(port, function(){
  console.log("Express server listening on port " + port + " ...");
});
2个回答

9

您必须先插入一个文档。在mongodb中,模式不是显式定义的。一旦插入了一个文档,集合将自动被创建,并且您会在mongolab控制台中看到它。

示例来自http://mongoosejs.com/

var mongoose = require('mongoose');
var db = mongoose.createConnection('localhost', 'test');

var schema = mongoose.Schema({ name: 'string' });
var Cat = db.model('Cat', schema);

var kitty = new Cat({ name: 'Zildjian' });
kitty.save(function (err) {
  if (err) // ...
  console.log('meow');
});

在上述保存调用之后,集合将被创建。

我该怎么做?我应该在上面的代码中添加/更改什么? - RBR
你需要查看mongoose API文档。在stackoverflow上也有一些例子,例如https://dev59.com/vWkv5IYBdhLWcg3wiRao。 - Brian Cajes
我读了mongoose的文档,它说:“一个模型是一个我们用来构造文档的类。” 这意味着模型在文档之前,但你需要一个模式来创建模型。 所以顺序似乎是:模式->模型->文档。 你好像在说顺序是文档->模式->模型。 我感到困惑。 - RBR
你提到的顺序是正确的,但你还没有创建或插入文档。在插入文档之前,mongodb服务器不会在这种情况下创建集合。当你定义mongoose模式或模型时,服务器端实际上什么也没做。以下是一个示例更新答案。 - Brian Cajes
啊哈!谢谢,布莱恩。抱歉让你困惑了……我正在看这本书(在凌晨时分,其实我应该睡觉的),[我以为]它说创建模式后,我应该在mongolab中看到一些显示模式已创建的东西。但事实并非如此,所以我认为我的代码在默默失败。但现在我明白了。再次感谢。 - RBR

0
MongoDB中的数据具有灵活的模式。同一集合中的文档不需要具有相同的字段或结构,集合文档中的常见字段可能包含不同类型的数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接