1. 말도 안됩니다
2013 년 1 월 MongoDB와 접촉 한 이후, 나는 여행 태그 서비스, Weibo 태그 검색 시스템, MAP 서비스 및 웹 앱 서비스를 개발했습니다. MongoDB를 사용한 시나리오는 .NET 및 Java 환경에서 node.js 플랫폼으로 전송되었습니다. 나는 Node.js와 Mongodb가 서로 잘 결합된다는 것을 점점 더 느낍니다. Mongodb와 Node.js는 한 쌍으로 태어난 것처럼 느껴집니다. 실제로 MongoDB의 클라이언트는 JS의 구문 분석 엔진입니다. 따라서 MongoDB 및 Node.js를 제품 프로토 타입으로 선택하는 것도 매우 좋은 선택입니다. 인터넷에서 나는 네티즌을 만났다. 네이티브 드라이버를 사용했지만 연결 종료 작업 등과 같은 코드를 작성할 때주의를 기울일 수있는 많은 것들이 있습니다. 따라서 Node.js 개발 환경에서 Mongoskin을 사용하는 것이 좋습니다.
2. 논의해야 할 몇 가지 개념
(1) 데이터베이스 : 관계형 데이터베이스와 동일합니다.
(2) 수집 : 관계형 데이터베이스의 테이블.
(3) 문서 : 관계형 데이터베이스와 유사한 레코드는 실제로 JSON 객체입니다.
(4) 데이터베이스 설계 : NOSQL 설계를 고려하고 관계형 데이터의 설계 아이디어를 포기하는 것이 좋습니다. 실제로 NOSQL 데이터베이스 설계는 심오하며 프로젝트에서 지속적으로 실시되어야합니다.
(5) 사용자 시스템 : 각 데이터베이스에는 자체 관리자가 있습니다.
코드 사본은 다음과 같습니다.
dbname을 사용하십시오. db.adduser ( 'root_1', 'test');
(7) 외부 포트를 변경하는 것이 좋습니다
(8) 서비스를 시작합니다 (이것은 Win 및 Linux에서 약간 수정되었습니다) :
코드 사본은 다음과 같습니다.
mongod --dbpath "xx/mongodb/data/db" -logpath "xx/mongodb/log/mongo.log" -logappend -auth -포트 7868
3. MongoDB 개발 인프라 구축
(0) NPM 몽고 스킨 설치 몽고 스킨 설치
Node.js 설치, 패키지 및 기타 메커니즘은 여기에 소개되지 않습니다.
(1) configuration file config.json을 만듭니다
코드 사본은 다음과 같습니다.
{
"dbname": "테스트",
"포트": "7868",
"호스트": "127.0.0.1",
"사용자 이름": "테스트",
"비밀번호": "테스트"
}
(2) UTIL 관련 클래스 mongo.js 생성 : DB 객체를 내보내십시오
코드 사본은 다음과 같습니다.
var mongoskin = require ( 'mongoskin'),
config = require ( './../ config.json');
/*
* @DES : 데이터베이스 연결 모듈을 내 보냅니다
* */
module.exports = (function () {
var host = config.host,
port = config.port,
dbname = config.dbname,
username = config.username,
password = config.password,
str = 'mongodb : //' + username + ':' + password + '@' + host + ':' + port + '/' + dbname;
var 옵션 = {
Native_parser : True
};
Return Mongoskin.db (str, 옵션);
}) ();
(3) CRUD의 기본 클래스 구축 : 중복 커드 코드를 줄이려면 관련 JSON 객체 만 전달하면됩니다.
코드 사본은 다음과 같습니다.
var db = require ( './ mongo.js'),
상태 = 요구 사항 ( './ status'),
Mongoskin = 요구 ( 'Mongoskin');
var crud = function (collection) {
this.collection = 컬렉션;
db.bind (this.collection);
};
crud.prototype = {
/*
* @des : 레코드를 만듭니다
* @Model : 삽입 된 레코드, JSON 형식의 모델
* @callback : 콜백, 성공적인 삽입 또는 고장 정보의 기록을 반환합니다.
*
* */
생성 : 함수 (모델, 콜백) {
db [this.collection] .save (모델, 함수 (err, item) {
if (err) {
리턴 콜백 (status.fail);
}
item.status = status.success.status;
item.message = status.success.message;
리턴 콜백 (항목);
});
},
/*
* @des : 레코드를 읽으십시오
* @Query : 쿼리 조건, 몽고 쿼리의 JSON 문자
* @Callback : 콜백, 요구 사항 또는 실패 정보를 충족하는 레코드를 반환합니다.
*
* */
읽기 : 함수 (쿼리, 콜백) {
db [this.collection] .find (query) .toArray (function (err, items) {
if (err) {
리턴 콜백 (status.fail);
}
var obj = {
상태 : status.success.status,
메시지 : status.success.message,
항목 : 항목
};
리턴 콜백 (OBJ);
});
},
/*
* @des : 레코드를 업데이트하십시오
* @Query : 쿼리 조건, 몽고 쿼리의 JSON 문자, 여기 _id가 있습니다.
* @updateModel : 업데이트 해야하는 JSON 형식의 모델
* @callback : 성공 또는 실패 정보를 반환합니다
*
* */
업데이트 : 함수 (쿼리, UpdateModel, Callback) {
var set = {set : updateModel};
db [this.collection] .update (query, set, function (err) {
if (err) {
리턴 콜백 (status.fail);
}또 다른{
리턴 콜백 (status.success);
}
});
},
/*
* @des : 레코드를 삭제합니다
* @Query : 쿼리 조건, 몽고 쿼리의 JSON 문자
* @callback : 실패 또는 성공의 메시지를 반환합니다
*
* */
deletedata : 함수 (쿼리, 콜백) {
db [this.collection] .remove (query, function (err) {
if (err) {
리턴 콜백 (status.fail);
}
리턴 콜백 (status.success);
});
}
};
module.exports = crud;
(4) build status.json, 일부 상태는 성공과 실패를 나타내려면 필요하기 때문에, 이는 나중에 검증 코드 오류, SMS 확인 오류, 사용자 이름 오류 등으로 확장 될 수 있습니다.
코드 사본은 다음과 같습니다.
module.exports = {
/*
* 성공 상태
*
* */
성공: {
상태 : 1,
메시지 : 'OK'
},
/*
* 실패 상태
*
* */
실패하다: {
상태 : 0,
메시지 : '실패'
},
/*
* 두 번 입력 한 비밀번호는 일관성이 없습니다
* */
repeatpassword : {
상태 : 0,
메시지 : '두 번 입력 한 암호는 일관성이 없습니다'
}
};