使用Express连接MongoDB
首先
我还没有接触过NoSQL数据库,所以我想学习一下。
顺便试试看能否从Express开始运行。
前提
苹果操作系统。
安装
使用Homebrew来安装。
brew update
brew install mongodb
在安装MongoDB时,遇到了以下错误。
Error: Xcode alone is not sufficient on Sierra.
Install the Command Line Tools:
xcode-select --install
依照被告知進行 xcode-select –install 指令。
一旦安裝程式出現,就進行安裝。
试着动一下
根据这个参考,在这里创建一个文件夹。
mkdir -p /data/db
使用mongod启动时出错。
2018-04-13T20:59:18.279+0900 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused
2018-04-13T20:59:18.280+0900 E QUERY [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:251:13
@(connect):1:6
exception: connect failed
似乎需要更改权限。
如果下一个评论出现了,可能就可以了。
waiting for connections on port 27017
试试看
尝试从终端使用Mongo。
一种操作方式
コマンド説明show dbsデータベースの一覧を表示use [DB名][DB名]にデータベースを切り替える。無ければ作成。db.createCollection([コレクション名])コレクションの作成db.[DB名].insert([データ])データ追加。db.[DB名].update([変更前データ],[変更後データ])データ更新。db.[DB名].insert([データ])データ削除。helpヘルプ表示db.help()データベースへの操作ヘルプdb.[コレクション名].help()コレクションへの操作ヘルプ
以下是我使用后的感受。
# DB作成
> use test
switched to db test
# コレクション作成
> db.createCollection('testコレクション')
{ "ok" : 1 }
# 作成したものの確認
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
# データを入れる
> db.test.insert({id:1, name:'test1'})
WriteResult({ "nInserted" : 1 })
# 入れたデータを確認
> db.test.find()
{ "_id" : ObjectId("5ad4a42e31752cb52c3bc118"), "id" : 1, "name" : "test1" }
# まとめても入る
> db.test.insert([{id:2, name:'test2'},{id:3,name:'test3'}])
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
# ホントに入ったか確認
> db.test.find()
{ "_id" : ObjectId("5ad4a42e31752cb52c3bc118"), "id" : 1, "name" : "test1" }
{ "_id" : ObjectId("5ad4a4a131752cb52c3bc11a"), "id" : 2, "name" : "test2" }
{ "_id" : ObjectId("5ad4a4a131752cb52c3bc11b"), "id" : 3, "name" : "test3" }
# 更新してみる
> db.test.update({id:1},{ $set: {name:'test1Update'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find()
{ "_id" : ObjectId("5ad4a46831752cb52c3bc119"), "id" : 1, "name" : "test1Update" }
{ "_id" : ObjectId("5ad4a4a131752cb52c3bc11a"), "id" : 2, "name" : "test2" }
{ "_id" : ObjectId("5ad4a4a131752cb52c3bc11b"), "id" : 3, "name" : "test3" }
# データを消してみる
> db.test.remove({id:3})
WriteResult({ "nRemoved" : 1 })
> db.test.find()
{ "_id" : ObjectId("5ad4a46831752cb52c3bc119"), "id" : 1, "name" : "test1Update" }
{ "_id" : ObjectId("5ad4a4a131752cb52c3bc11a"), "id" : 2, "name" : "test2" }
尝试使用Express
使用npm install mongodb –save 命令来安装用于在Node中操作的模块。
由于本次安装的版本是3.0.6,因此我们将根据此版本创建js代码。
'usestrict'
const MongoClient = require('mongodb').MongoClient;
const test = require('assert');
var db;
var collection;
// 接続先URL
const url = 'mongodb://localhost:27017';
// 接続するDB名
const dbName = 'test';
// MongoDBに接続
const mongoClient = new MongoClient(url);
mongoClient.connect(function(err, client) {
db = client.db(dbName);
});
var col = function() {
// とりあえずDB名固定で返す
return db.collection('test');
}
module.exports.collection = col;
只需要一个选项即可,请原生地用中文重新表达以下内容:
数据库连接的准备应该已经完成了。
为了从Express调用,需要对之前创建的index.js进行以下修改。
'use strict';
// import
const express = require('express');
// 作ったjsインポート
const db = require('./mongodb');
const app = express();
app.use(express.static('./app/'));
app.get('/', (req,res) => {
console.log('Hello World!');
});
// '/sel'出来た時に一覧を返す
app.get('/sel', (req,res) => {
db.collection().find().toArray((err,docs) => {
res.send(docs);
res.end();
});
});
app.listen(3000, () => {
console.log('listen on Port 3000');
});
当访问 localhost:3000/sel 时,返回了结果。
[{"_id":"5ad4a46831752cb52c3bc119","id":1,"name":"test1Update"},{"_id":"5ad4a4a131752cb52c3bc11a","id":2,"name":"test2"}]
最后
暂时先这样就可以了。未来如果能够实现其他功能,我想再更深入地研究一下MongoDB。