1.データベース構造の概要と環境
1.1なぜデータベースを使用
- 動的データWebサイトはデータベースに格納されています
- 永続ユーザデータベースはフォームを通じて収集ストアクライアント情報を使用することができます
- データベース・ソフトウェア自体は、データの効率的な管理を行うことができます
異なるパラメータを渡すことによって、リクエストを処理して、結果が異なるデータを表示します
1.2データベースとは何ですか
データウェアハウスを格納するための、そのデータベースは、データは、異なるカテゴリの整然と格納することができます。それはあなたがAPIを介して行くためにそれを操作することができ、ソフトウェアの言語とは無関係です。
一般的なデータベースソフトウェア:mysqlの、MongoDBの、Oracleの。
nodejsは、この使用して、複数のデータベースを使用することができますMongoDBのを MongoDBのオープンAPIは、JavaScriptの構文ですnodejsについて同じであるため、データベースとして、データストレージは、MongoDBのは、より親しみやすいnodejs学習のためのMongoDB JSON形式です。
ダウンロードしてインストールするには1.3のMongoDBデータベース
1.4 MongoDBの可視化ソフトウェア
MongoDBの可視化ソフトウェアは、一つの方法は、グラフィカル・インターフェース・データベース操作を使用することです。
1.5データベースの概念
各データ・ウェアハウス内のデータの複数のセットを含むことができる複数のデータウェアハウスを含むことができるつのソフトウェア・データベースでは、各データセットは、複数の文書(特定のデータ)を含んでもよいです。
用語 | 説明 |
---|---|
データベース | データベース、MongoDBのデータベースソフトウェアは、複数のデータベースを作成することができます |
コレクション | コレクション、データの収集は、JavaScriptで配列として理解することができます |
資料 | 文書は、特定のデータが、JavaScriptでオブジェクトとして理解することができます |
フィールド | フィールド、文書のプロパティ名には、JavaScriptでオブジェクトのプロパティとして理解することができます |
1.6マングース、サードパーティ製のパッケージ
Node.jsのNode.jsのを使用してのMongoDBデータベース操作は、サードパーティのパッケージのマングースに依存する必要があります
使用マングースインストールNPMダウンロードするコマンドを
1.7スタートMongoDBの
コマンドラインツールで実行ネットはMongoDBのを開始しそうにMongoDBは接続されません、MongoDBのを開始します。
サービスを停止します。net stop MongoDBの
注:あなたがアクセス発生を拒否した場合、アクセスが十分ではありません、管理モードでコマンドラインツールを開きます
1.8データベース接続
使用して、マングースが提供する接続データベース接続方法に。
//引入mongoose模块
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/playground')
.then(() => console.log('数据库连接成功'))
.catch(err => console.log('数据库连接失败', err));
説明:
MongoDBのでは明示的にデータベースを作成する必要はありません。あなたは、データベースが存在していない使用している場合、MongoDBは自動的に作成されます。
現在の接続を使用すると、エラー警告が表示されます。
(ノード:9688)DeprecationWarning:現在のURLストリングパーサは廃止され、そして将来のバージョンでは削除されます。MongoClient.connectに:新しいパーサーを使用するには、オプション{真useNewUrlParser}を渡します。
(ノード:9688)DeprecationWarning:現在のサーバの検出および監視エンジンが廃止され、そして将来のバージョンでは削除されます。MongoClientコンストラクタに:新しいサーバーを発見し、監視エンジンを使用するには、オプション{真useUnifiedTopology}を渡します。二つの言葉は、おそらく意味:現在のURL文字列解析の発見と監視エンジンが廃止されており、現在のサーバーの将来のバージョンでは削除されます。
接続方法でのエラー警告を解決するには、次のパラメータを追加します。
//引入mongoose模块
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/playground',{ useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('数据库连接成功'))
.catch(() => console.log(err, '数据库连接失败'));
2. MongoDBのCRUD操作
コレクション2.1を作成します。
コレクションを作成するには、2つのステップ、第DUIに分割されているコレクションセットのルール、及び第二の収集作成するコレクションを作成するmongoose.Schemaコンストラクタを作成し、インスタンス。
//创建集合规则
const courseSchema = new mongoose.Schema({
name:String,
author:String,
isPublished:Boolean
});
//创建集合并应用规则
const Course = mongoose.model('Course',courseSchema);//courses
- コース:などの大文字、コレクション名の最初の文字を、標準化
- コース:マングースコレクションは、最初の文字がの形で存在するが、のような小文字プラスS、後ろにいない大文字で自動的に作成しました
model
この方法は、コレクションのコンストラクタを表すコンストラクタ関数を返します- デフォルトでは、すぐにそれが自動的に空で作成されますが、データが挿入され、作成したコレクションを作成しません。
2.2文書を作成します。
文書が実際に作成し、コレクションにデータを挿入します。
二つのステップで:
コレクションのインスタンスを作成します。
データベースにデータを保存するために、オブジェクトのインスタンスの下にメソッド呼び出しを保存します。
//创建集合实例
const course = new Course({
name:'NodeJs精品课',
author:'Mr li',
isPublished:true
});
//将数据保存到数据库
course.save();
別の方法(コールバック付き):
Course.create({name: 'JavaScript基础', author: 'Mr li', isPublish: true}, (err, doc) => {
// 错误对象
console.log(err)
// 当前插入的文档
console.log(doc)
});
若しくは
Course.create({name: 'JavaScript基础', author: '黑马讲师', isPublish: true})
.then(doc => console.log(doc))
.catch(err => console.log(err))
注:すべての操作は非同期のデータベース操作です
データベースに3.3のMongoDBデータ
MongoDBは、環境変数に置かれたディレクトリの下のインストールディレクトリデータベース、インストールbinディレクトリを見つけます。
mongoimport –d 数据库名称 –c 集合名称 –-file 要导入的数据文件
3.4クエリ文書
// 根据条件查找文档(条件为空则查找所有文档)
Course.find().then(result => console.log(result))
戻り値のデータ:
[
{
_id: 5e70cd0fa25bbf21c0077aca,
name: 'NodeJs精品课',
author: 'Mr li',
isPublished: true,
__v: 0
},
{
_id: 5e70cf6b0e954a332c9810a2,
name: 'JavaScript基础',
author: 'Mr li',
isPublished: true,
__v: 0
}
]
//查找指定Id的数据
Course.find({_id: '5e70cf6b0e954a332c9810a2'}).then(result => console.log(result));
戻り値のデータ
[
{
_id: 5e70cf6b0e954a332c9810a2,
name: 'JavaScript基础',
author: 'Mr li',
isPublished: true,
__v: 0
}
]
使用に関係なく返されますどのように多くのアレイフォーマット、0を返す空の配列をデータを検索する方法を見つけるん
// 根据条件查找文档
Course.findOne({_id: '5e70cf6b0e954a332c9810a2'}).then(result => console.log(result))
戻り値のデータ
{
_id: 5e70cf6b0e954a332c9810a2,
name: 'JavaScript基础',
author: 'Mr li',
isPublished: true,
__v: 0
}
findOne方法は、単にデータオブジェクトフォーマットはJSONで返します
//匹配大于 小于
User.find({age:{$gt:20,$lt:50}}).then(result=>console.log(result));
//匹配包含
User.find({hobbies:{$in:'敲代码'}}).then(result=>console.log(result));
//选择要查询的字段
User.find().select('name age').then(result=>console.log(result));
//注意:默认还会有_id,如果不想显示某个字段可以添加-,表示过滤字段,如:-_id
//将数据按照年龄进行排序,升序
User.find().sort('age').then(result=>console.log(result));
//说明:降序在字段前面加-,如:-age
//skip 跳过多少条数据 limit 限制查询数量
User.find().skip(3).limit(3).then(result=>console.log(result));
3.5削除ドキュメント
//删除查找第一个对象,并返回删除的对象
User.findOneAndDelete({}).then(result=>console.log(result));
//删除多个,条件为空删除全部,返回删除结果与个数
User.deleteMany({}).then(result=>console.log(result));
3.6アップデートドキュメント
// 更新单个
User.updateOne({查询条件}, {要修改的值}).then(result => console.log(result))
// 更新多个
User.updateMany({查询条件}, {要更改的值}).then(result => console.log(result))
3.7マングース検証
あなたは一連のルールを作成すると、現在のフィールドのバリデーションルールを設定することができ、検証が失敗した挿入を入力しませんでした。
- 必要:フィールドを渡します真
- MINLENGTH:3最小の文字列の長さ
- MAXLENGTH:20最大文字列長
- 分:2の最小値
- 最大:100〜100の最大値
- 列挙:[「HTML」、「CSS」、「ジャバスクリプト」、「のNode.js」]列挙、利用可能な項目を含む、与えられていない場合に列挙の範囲であろう
- トリム:真の取り外しスペースを文字列に
- 検証:カスタムバリデータ
- デフォルト:デフォルト値
error.errors [「フィールド名」] .message:エラーメッセージを取得します。
例:
// 创建集合规则
const PostSchema = new mongoose.Schema({
title:{
type:String,
required:[true,'文章内容不能为空'],
minlength:[2,'文章内容不能小于2个字'],
maxlength:[10,'文章内容不能大于10个字'],
//去除字符串两边的空格
trim:true
}
});
const Post = mongoose.model('Post',PostSchema);
Post.create({title:'123'}).then(result => console.log(result));
説明:検証ルールは、単一のアイテムまたは配列を渡すことができ、第二の値は、カスタムエラーメッセージであります
カスタム検証ルール、およびハンドルのエラーメッセージに
const PostSchema = new mongoose.Schema({
title:{
type:String,
required:[true,'文章内容不能为空'],
minlength:[2,'文章内容不能小于2个字'],
maxlength:[10,'文章内容不能大于10个字'],
//去除字符串两边的空格
trim:true
},
author:{
type:String,
validate:{//自定义验证规则
validator: v =>{
//返回布尔值,true验证成功,false验证失败,v为需要验证的值
return v && v.length > 4
},
//自定义错误
message: '输入的值不匹配'
}
}
});
const Post = mongoose.model('Post',PostSchema);
Post.create({title:'123',author:''}).then(result => console.log(result))
.catch(error => {
//获取信息错误对象
const errors = error.errors;
//循环错误对象
for(attr in errors){
//将错误信息打印
console.log(errors[attr].message);
}
});
3.8セットアソシアティブ
通常、そこに異なるデータセット間の関係で異なるコレクションに保存されているような物品の情報とユーザ情報としては、しかし、記事では、ユーザーによって公開されている、すべての情報を照会するために出版された論文は、ユーザーが含まれ、あなたは協会のセットを使用する必要があります。
コレクションの使用に関連付けられたID
使用して、クエリの関連するメソッドのセットを移入します
// 用户集合
const User = mongoose.model('User', new mongoose.Schema({ name: { type: String } }));
// 文章集合
const Post = mongoose.model('Post', new mongoose.Schema({
title: { type: String },
// 使用ID将文章集合和作者集合进行关联
author: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
}));
//联合查询
Post.find()
.populate('author')
.then((err, result) => console.log(result));