Делаю приложение на meanio. Система реализует основу для разработки, просто создает пакет и пишешь свою бизнес логику, тривиальные настройки, как подключение базы данных, шаблонизатор, архитектуру системы делает среда meanio.
Никогда еще сам не создавал базу данных на монго, вот сейчас над этим и застрял.
Написал следующую модель данных:
'use strict';
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
/**
* Order Schema
*/
var OrderSchema = new Schema({
created: {
type: Date,
default: Date.now
},
client: {
type: Schema.ObjectId,
ref: 'Client'
},
paymentType: {
type: Schema.ObjectId,
ref:'paymentType',
required: true
},
passenger: [{
type: Schema.ObjectId,
ref: 'passenger',
required: true
}],
driver: {
type: Schema.ObjectId,
ref: 'driver',
required: true
},
status: {
type: Schema.ObjectId,
ref: 'status',
required: true
},
moment: {
start: { type : Date, default: Date.now },
met: { type : Date, default: Date.now },
end: { type : Date, default: Date.now }
},
direction:{
from: {
type: Schema.ObjectId,
ref: 'place',
required: true
},
to: {
type: Schema.ObjectId,
ref: 'place'
}
},
sum: {
type: Number
},
km: {
type: Number
},
comment: {
type: Number
},
ticket:{
type: Number
},
permissions: {
type: Array
},
updated: {
type: Array
}
});
/**
* Validations
OrderSchema.path('title').validate(function(title) {
return !!title;
}, 'Title cannot be blank');
OrderSchema.path('content').validate(function(content) {
return !!content;
}, 'Content cannot be blank');
*/
/**
* Statics
*/
OrderSchema.statics.load = function(id, cb) {
this.findOne({
_id: id
}).populate('user', 'name username').exec(cb);
};
mongoose.model('Order', OrderSchema);
Далее использую методы контроллера для создания, обновление, чтения и удаления. Вот метод для создания:
create: function(req, res) {
var order = new Order(req.body);
order.created = new Date();
///... Указать другие параметры заказа
order.save(function(err) {
if (err) {
return res.status(500).json({
error: 'Cannot save the order'
});
}
res.json(order);
});
},
Для создания заказа используется справочники в базе данных и данные которые вводить диспетчер. Как например добавить в заказ клиента, если я еще не создал такую коллекцию клиенты? У меня имеется модель для каждого указанного в моделей.
Есть вариант заранее создать эти справочники в базе данных, но и тут я не понимаю как добавить в базу данных через консоль.
Полная версия JSON файла которая требуется для заказа
{
paymentType: 'Tariff',
client: objectId(hfjdhjfhsfr3hbcy84783),
passengers: [
{
name: 'Аян',
phone: '+77775647544'
},
{
name: 'Баян',
phone: '+77776463392'
}],
created: 20160118123400,
driver: objectId(hfjdhjfhsfr3hbcy84783),
status: objectId(hfjdhjfhsfr3hbcy84783),
moments: {
start: 20160118123400,// Время подачи машины к пассажиру
met: 20160118125023, // Время когда пассажир вышел из дома и сел в машину
end: 20160118132014 // Время когда пассажир был доставлен на место
},
direction:
{
from: 'Гостиница Казахстан',
to: 'Аэропорт'
},
sum: 2700,
km: 23,
comment: 'Пассажир с ребенком',
ticket: '1234567890'
}
Ответ
Решение было таким. Вроде все понял после наставления и прочтения документации mongoose
фактически тебе не надо ничего делать для создания базы данных и модели данных
потому что монго создает базу автоматически при первом обращении к этой базе: http://www.tutorialspoint.com/mongodb/mongodb_create_database.htm
MongoDB use DATABASE_NAME is used to create database. The command will create a new database, if it doesn't exist otherwise it will return the existing database.
команда use неявно используется мангузом при подключении к монго:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/ test ');
test в данном случае и есть название базы
http://mongoosejs.com/docs/index.html
The first thing we need to do is include mongoose in our project and open a connection to the test database on our locally running instance of MongoDB.
что касается модели данных, монго по большому счету похер на модель, она имеет набор коллекций в каждой базе и также создает коллекцию автоматически
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
/**
* Order Schema
*/
var OrderSchema = new Schema({
created: {
type: Date,
default: Date.now
},
это добро нужно только mongoose, который проверяет данные по этой модели
самое важное из того, что стоит указывать в модели - это индексы, вот их мангуз явно создает в монге:
http://mongoosejs.com/docs/guide.html
var animalSchema = new Schema({
name: String,
type: String,
tags: { type: [String], index: true } // field level
});
все остальное желательно, но не обязательно
mongo - это schemaless database (база без схемы)
поэтому часть своего sql server опыта тебе лучше забыть
в mongo все проще в плане "начать работу"!
я бы посоветовал тебе не торопиться и внимательно почитать little mongo book: http://www.pvsm.ru/download/mongodb-ru.pdf
и документацию по мангузу, это займет пару дней, но зато поймешь что к чему.
По своему опыту скажу, что начать работать с монгой легче, чем с sql server
mongolab помнишь? облачная монга
Там все тебе нужное следано через веб-интерфейс
с ним еще проще начать
Комментариев нет:
Отправить комментарий