【问题标题】:Creating a collection schema in a mongolab mongodb database from node.js从 node.js 在 mongolab mongodb 数据库中创建集合模式
【发布时间】:2012-10-30 15:20:02
【问题描述】:

我是 node.js 和 mongodb 的新手。

我正在尝试使用以下代码从 node.js 应用程序中为 mongolab mongodb 数据库中的用户集合创建模式。该代码似乎没有失败(至少,我没有收到错误消息),但我也没有看到任何迹象表明它正在成功。也就是说,当我去 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 + " ...");
});

【问题讨论】:

    标签: node.js mongodb mongoose mlab


    【解决方案1】:

    您必须先插入一个文档。模式在 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');
    });
    

    在上面的保存调用之后将创建集合

    【讨论】:

    • 我该怎么做?我应该在上面的代码中添加/更改什么?
    • 您必须查看 mongoose API 文档。还有一些关于堆栈溢出的例子,例如。 stackoverflow.com/q/10520501/579461
    • 我确实阅读了 mongoose 文档,它说:“模型是我们用来构建文档的类。”这意味着模型位于文档之前,但您需要一个模式来创建模型。所以顺序似乎是:模式->模型->文档。听起来你说的顺序是文档-> 模式-> 模型。我很困惑。
    • 您提到的顺序是正确的,但是您还没有创建或插入文档。在插入文档之前,mongodb 服务器不会在这种情况下创建集合。当您定义猫鼬模式或模型时,服务器端实际上没有做任何事情。用一个例子更新答案。
    • 啊哈!谢谢,布赖恩。很抱歉造成混乱......我正在读这本书(在我真正应该睡觉的凌晨),并且[我想]它说在我创建一个模式之后,我应该在 mongolab 中看到一些东西这表明架构已创建。这没有发生,所以我认为我的代码默默地失败了。但现在我明白了。再次感谢。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 2016-04-16
      相关资源
      最近更新 更多