Создание схемы коллекции в базе данных mongolab mongodb из node.js

Я новичок в 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:[email protected]: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 + " ...");
});

person RBR    schedule 10.11.2012    source источник


Ответы (2)


Сначала необходимо вставить документ. Схемы явно не определены в 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');
});

после вызова сохранения выше коллекция будет создана

person Brian Cajes    schedule 10.11.2012
comment
Как мне это сделать? Что я должен добавить/изменить в приведенном выше коде? - person RBR; 11.11.2012
comment
Вы должны просмотреть документацию API мангуста. Есть также примеры переполнения стека, например. stackoverflow.com/q/10520501/579461 - person Brian Cajes; 11.11.2012
comment
Я читал документацию по мангусту, и там говорилось: Модель — это класс, с помощью которого мы создаем документы. что подразумевает, что модель предшествует документу, но для создания модели вам нужна схема. Таким образом, порядок выглядит следующим образом: схема -> модель -> документ. Похоже, вы говорите, что порядок документ -> схема -> модель. Я смущен. - person RBR; 11.11.2012
comment
Упомянутый вами порядок правильный, но вы не создали и не вставили документ. Пока вы не вставите документ, в этом случае сервер mongodb не создаст коллекцию. На самом деле ничего не делается на стороне сервера, когда вы определяете свою схему или модель мангуста. Обновление ответа с примером. - person Brian Cajes; 11.11.2012
comment
Ага! Спасибо, Брайан. Извините за путаницу ... Я читаю эту книгу (в ранние утренние часы, когда я действительно должен спать), и [я думал], что в ней сказано, что после создания схемы я должен увидеть что-то в mongolab это показывает, что схема была создана. Этого не произошло, поэтому я подумал, что мой код молчал. Но теперь я понимаю. Еще раз спасибо. - person RBR; 11.11.2012

Данные в MongoDB имеют гибкую схему. Документы в одной коллекции не обязательно должны иметь одинаковый набор полей или структуру, а общие поля в документах коллекции могут содержать разные типы данных.

person Shyam Bhagat    schedule 30.08.2015