ノードのマンゴーとは何ですか
node では、mongooes はサードパーティ モジュールおよびオブジェクト ドキュメント モデル (ODM) ライブラリであり、Node のネイティブ MongoDB モジュールをさらに最適化およびカプセル化し、オブジェクト モデルを操作することで MongoDB データベースを操作できます。
Mongoose
Mongoose は Nodejs のモジュールで、MongoDB モジュールを操作してデータベースを操作することができます。 Mongooose は、Node のネイティブ MongoDB モジュールをさらに最適化してカプセル化し、より多くの機能を提供するオブジェクト ドキュメント モデル (ODM) ライブラリです。 Mongoose は MongoDB 用のオブジェクト モデル ツールです。node-mongodb-native に基づいて開発された MongoDB 用の nodejs ドライバーです。現在、MongoDB を操作するための Node.js の優先ライブラリでもあります。 #Mongoose の利点#ドキュメントのスキーマ構造 (制約) (スキーマ) を作成できます
モデル内のオブジェクト/ドキュメントを検証できます
データをオブジェクト モデルに型変換できます
ミドルウェアを使用して適用 ビジネス ロジックのフック
Node のネイティブ MongoDB ドライバーよりも簡単
注: これを使用するには、まず、node.js をインストールし、モンゴデータベース。
mongoose のインストール
npm install mongoose
接続文字列
db.js を作成します
var mongoose = require('mongoose'), DB_URL = 'mongodb://localhost:27017/mongoosesample';/** * 连接 */mongoose.connect(DB_URL);/** * 连接成功 */mongoose.connection.on('connected', function () { console.log('Mongoose connection open to ' + DB_URL); }); /** * 连接异常 */mongoose.connection.on('error',function (err) { console.log('Mongoose connection error: ' + err); }); /** * 连接断开 */mongoose.connection.on('disconnected', function () { console.log('Mongoose connection disconnected'); });
コードからわかるように、いくつかのイベントが監視され、実行によって接続が成功したことを示す Connected イベントがトリガーされます。
接続内に 10 を超えるイベントがあります 上記で説明したイベントがいくつかありますが、キーはどのイベントを監視するかによって異なります。
他のイベントは自分で表示できます: http://mongoosejs.com/docs/api.html#connection_Connection
これは最も単純な接続文字列です。もちろん、次のような他の形式もあります。 as: 接続パスワード、データベース接続設定、クラスターモード接続等について説明しています。ご利用の際はAPIドキュメントをご自身でご確認ください。
Schema
スキーマは mongoose で使用されるデータ パターンであり、テーブル構造の定義として理解できます。各スキーマは mongodb のコレクションにマップされます。 、データベースを操作する機能はありません まず db.js を変換し、mongoose オブジェクトをエクスポートしますvar mongoose = require('mongoose'), DB_URL = 'mongodb://localhost:27017/mongoosesample';/** * 连接 */mongoose.connect(DB_URL);/** * 连接成功 */mongoose.connection.on('connected', function () { console.log('Mongoose connection open to ' + DB_URL); }); /** * 连接异常 */mongoose.connection.on('error',function (err) { console.log('Mongoose connection error: ' + err); }); /** * 连接断开 */mongoose.connection.on('disconnected', function () { console.log('Mongoose connection disconnected'); }); module.exports = mongoose;
という名前を付けます。 mongoose = require('./db.js'= UserSchema =
userpwd: {type: String},
userage: {type: Number},
logindate : { type: Date}
ログイン後にコピー
スキーマの定義は、フィールド名とタイプを指定するだけで簡単です。
スキーマ タイプの組み込みタイプは次のとおりです。
mongoose = require('./db.js'= UserSchema = userpwd: {type: String}, userage: {type: Number}, logindate : { type: Date}
# #文字列
数値
- ##ブール値 | ブール
- 配列
-
## ObjectId | Oid
##Mixed
##また、スキーマでいくつかのことを実行します。一般的に使用されることについては後ほど説明します。
モデル-
スキーマを定義したら、次のステップはモデルを生成することです。 Modelはスキーマによって生成されるデータベースを操作できるモデルです
上記で定義したユーザーのスキーマに対してUserモデルを生成してエクスポートします 修正後のコードは以下のとおりです
/** * 用户信息 */ var mongoose = require('./db.js'), Schema = mongoose.Schema;var UserSchema = new Schema({ username : { type: String }, //用户账号 userpwd: {type: String}, //密码 userage: {type: Number}, //年龄 logindate : { type: Date} //最近登录时间 }); module.exports = mongoose.model('User',UserSchema);
一般的なデータベース操作
次に、いくつかの一般的な操作を示す test.js ファイルを作成します。挿入
Model#save([fn])
var User = require("./user.js");
/**
* 插入
*/
function insert() {
var user = new User({
username : 'Tracy McGrady', //用户账号
userpwd: 'abcd', //密码
userage: 37, //年龄
logindate : new Date() //最近登录时间
});
user.save(function (err, res) {
if (err) {
console.log("Error:" + err);
} else {
console.log("Res:" + res);
}
});
}
insert();
ログイン後にコピー
結果は robmongo ツールで表示されます
var User = require("./user.js"); /** * 插入 */ function insert() { var user = new User({ username : 'Tracy McGrady', //用户账号 userpwd: 'abcd', //密码 userage: 37, //年龄 logindate : new Date() //最近登录时间 }); user.save(function (err, res) { if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }); } insert();
画像から、挿入が成功したことがわかります。
更新
Model.update(conditions, update, [options], [callback])
var User = require("./user.js");function update(){ var wherestr = {'username' : 'Tracy McGrady'}; var updatestr = {'userpwd': 'zzzz'}; User.update(wherestr, updatestr, function(err, res){ if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } update();
根据用户名更新密码,执行后结果如图
图中可以看出,密码更新成功!update方法基本可以满足所有更新!
常用方法还有findByIdAndUpdate,这种比较有指定性,就是根据_id
Model.findByIdAndUpdate(id, [update], [options], [callback])
var User = require("./user.js");function findByIdAndUpdate(){ var id = '56f2558b2dd74855a345edb2'; var updatestr = {'userpwd': 'abcd'}; User.findByIdAndUpdate(id, updatestr, function(err, res){ if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } findByIdAndUpdate();
其它更新方法
Model.findOneAndUpdate([conditions], [update], [options], [callback]) //找到一条记录并更新
删除
Model.remove(conditions, [callback])
var User = require("./user.js");function del(){ var wherestr = {'username' : 'Tracy McGrady'}; User.remove(wherestr, function(err, res){ if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } del();
结果就不贴了,res中会返回是否成功以及影响的行数:{"ok":1,"n":1}
其它常用方法还有:
Model.findByIdAndRemove(id, [options], [callback])
Model.findOneAndRemove(conditions, [options], [callback])
条件查询
已先插入一些测试数据 。。
Model.find(conditions, [fields], [options], [callback])
var User = require("./user.js"); function getByConditions(){ var wherestr = {'username' : 'Tracy McGrady'}; User.find(wherestr, function(err, res){ if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } getByConditions();
结果我就不展示了
第2个参数可以设置要查询输出的字段,比如改成
var User = require("./user.js"); function getByConditions(){ var wherestr = {'username' : 'Tracy McGrady'}; var opt = {"username": 1 ,"_id": 0}; User.find(wherestr, opt, function(err, res){ if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } getByConditions();
输出只会有username字段,设置方法如上,1表示查询输出该字段,0表示不输出
比如我要查询年龄范围条件应该怎么写呢?
User.find({userage: {$gte: 21, $lte: 65}}, callback); //这表示查询年龄大于等21而且小于等于65岁
其实类似的还有:
$or 或关系
$nor 或关系取反
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in 在多个值范围内
$nin 不在多个值范围内
$all 匹配数组中多个值
$regex 正则,用于模糊查询
$size 匹配数组大小
$maxDistance 范围查询,距离(基于LBS)
$mod 取模运算
$near 邻域查询,查询附近的位置(基于LBS)
$exists 字段是否存在
$elemMatch 匹配内数组内的元素
$within 范围查询(基于LBS)
$box 范围查询,矩形范围(基于LBS)
$center 范围醒询,圆形范围(基于LBS)
$centerSphere 范围查询,球形范围(基于LBS)
$slice 查询字段集合中的元素(比如从第几个之后,第N到第M个元素)
可能还有一些,没什么印象,大家自行看看api ^_^!
数量查询
Model.count(conditions, [callback])
var User = require("./user.js"); function getCountByConditions(){ var wherestr = {}; User.count(wherestr, function(err, res){ if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } getCountByConditions();
res会输出数量,也可以传入条件做条件查询!
根据_id查询
Model.findById(id, [fields], [options], [callback])
var User = require("./user.js"); function getById(){ var id = '56f261fb448779caa359cb73'; User.findById(id, function(err, res){ if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } getById();
这个还是比较常用,要据ID得到数据!
模糊查询
var User = require("./user.js"); function getByRegex(){ var whereStr = {'username':{$regex:/m/i}}; User.find(whereStr, function(err, res){ if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } getByRegex();
上面示例中查询出所有用户名中有'm'的名字,且不区分大小写,模糊查询比较常用,正则形式匹配,正则方式就是javascript正则,用到的比较多!
分页查询
var User = require("./user.js"); function getByPager(){ var pageSize = 5; //一页多少条 var currentPage = 1; //当前第几页 var sort = {'logindate':-1}; //排序(按登录时间倒序) var condition = {}; //条件 var skipnum = (currentPage - 1) * pageSize; //跳过数 User.find(condition).skip(skipnum).limit(pageSize).sort(sort).exec(function (err, res) { if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } getByPager();
分页是用得比较多的查询,分页原理用过其它数据库的都知道,分页用到的函数和mysql的比较类似
上面我用到sort(),这个是排序规则,就不单讲了!
其它操作
其它还有比较多常用的
索引和默认值
再看看我对user.js这个schema的修改
/** * 用户信息 */ var mongoose = require('./db.js'), Schema = mongoose.Schema; var UserSchema = new Schema({ username : { type: String , index: true}, //用户账号 userpwd: {type: String}, //密码 userage: {type: Number}, //年龄 logindate : { type: Date, default:Date.now} //最近登录时间 }); module.exports = mongoose.model('User',UserSchema);
index :建索引
default:默认值
LBS地址位置
lbs : { type: Array, index: '2d', sparse: true } //地理位置
上面有介绍过很多基于LBS的条件查询,Schema中定义时如上
LBS查询对于一些基于LBS应用会用得比较多。
其它常用方法
Model.distinct(field, [conditions], [callback]) //去重
Model.findOne(conditions, [fields], [options], [callback]) //查找一条记录
Model.findOneAndRemove(conditions, [options], [callback]) //查找一条记录并删除
Model.findOneAndUpdate([conditions], [update], [options], [callback]) //查找一条记录并更新
更多node相关知识,请访问:nodejs 教程!
以上がノードのマンゴーとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

nvm でノードを削除する方法: 1. 「nvm-setup.zip」をダウンロードして C ドライブにインストールします; 2. 「nvm -v」コマンドで環境変数を構成し、バージョン番号を確認します; 3. 「nvm」を使用しますinstall" コマンド ノードのインストール; 4. "nvm uninstall" コマンドでインストールしたノードを削除します。

ファイルのアップロードをどのように処理するか?次の記事では、Express を使用してノード プロジェクトでファイルのアップロードを処理する方法を紹介します。

この期間中、私は Tencent ドキュメントのすべてのカテゴリに共通する HTML 動的サービスを開発していましたが、さまざまなカテゴリへのアクセスの生成と展開を容易にし、クラウド移行のトレンドに従うために、Docker を使用して修正することを検討しました。サービス内容や製品バージョンを一元管理します。この記事では、私が Docker を提供するプロセスで蓄積した最適化の経験を参考として共有します。

この記事では、Node のプロセス管理ツール「pm2」について説明し、pm2 が必要な理由、pm2 のインストール方法と使用方法について説明します。皆様のお役に立てれば幸いです。

ピン張りのノードの詳細な説明とインストールガイドこの記事では、ピネットワークのエコシステムを詳細に紹介します - PIノードは、ピン系生態系における重要な役割であり、設置と構成の完全な手順を提供します。 Pinetworkブロックチェーンテストネットワークの発売後、PIノードは多くの先駆者の重要な部分になり、テストに積極的に参加し、今後のメインネットワークリリースの準備をしています。まだピン張りのものがわからない場合は、ピコインとは何かを参照してください。リストの価格はいくらですか? PIの使用、マイニング、セキュリティ分析。パインワークとは何ですか?ピン競技プロジェクトは2019年に開始され、独占的な暗号通貨PIコインを所有しています。このプロジェクトは、誰もが参加できるものを作成することを目指しています

Nodejs実行可能ファイルをpkgでパッケージ化するにはどうすればよいですか?次の記事では、pkg を使用して Node プロジェクトを実行可能ファイルにパッケージ化する方法を紹介します。

認証は、Web アプリケーションの最も重要な部分の 1 つです。このチュートリアルでは、トークンベースの認証システムと、それが従来のログイン システムとどのように異なるかについて説明します。このチュートリアルを終えると、Angular と Node.js で書かれた完全に動作するデモが表示されます。従来の認証システム トークンベースの認証システムに進む前に、従来の認証システムを見てみましょう。ユーザーはログイン フォームにユーザー名とパスワードを入力し、[ログイン] をクリックします。リクエストを行った後、データベースにクエリを実行してバックエンドでユーザーを認証します。リクエストが有効な場合、データベースから取得したユーザー情報を使用してセッションが作成され、セッション情報が応答ヘッダーで返され、セッション ID がブラウザに保存されます。対象となるアプリケーションへのアクセスを提供します。

「node-gyp.js」が「Node.js」のバージョンと一致しないため、npm node gyp が失敗します。解決策は次のとおりです: 1. 「npm cache clean -f」を使用してノード キャッシュをクリアします; 2. 「npm install -」を使用します。 g n" n モジュールをインストールします。 3. 「n v12.21.0」コマンドを使用して、「node v12.21.0」バージョンをインストールします。
