기존 데이터베이스에서는 데이터베이스 데이터를 조작하기 위해 많은 수의 SQL 문을 작성해야 합니다. 또한, 불규칙한 데이터를 저장할 때 기존 관계형 데이터베이스에서 테이블을 생성할 때 다양한 필드의 처리도 다소 약합니다. Ajax 기술의 광범위한 적용과 json 형식의 폭넓은 수용으로 인해 mongo는 개발자에게 더 가까워졌습니다.
Mongo 소개 및 적용 시나리오
MongoDB는 json 형식으로 저장되는 문서 중심의 비관계형 데이터베이스(NoSQL)입니다. Mongo DB는 객체 지향적 사고(OO 사고)를 매우 잘 구현합니다. Mongo DB에서는 모든 레코드가 Document 객체입니다. Mongo DB의 가장 큰 장점은 모든 데이터 지속성 작업에서 개발자가 SQL 문을 수동으로 작성할 필요가 없으며, 메소드를 직접 호출하여 CRUD 작업을 쉽게 구현할 수 있다는 점입니다.
mongo는 다음 시나리오에서 사용할 수 있습니다.
대형, 낮은 가치의 데이터 저장
json 및 객체 유형 데이터
웹사이트 캐시 데이터
댓글 및 하위 -댓글이 포함됨 명백한 종속성 데이터
다중 서버 데이터, 내장된 MapReduce는 전역 순회를 쉽게 실현할 수 있습니다.
mongodb 설치 및 사용
공식 웹사이트 https://www.mongodb.org/에서 최신 안정 버전을 다운로드할 수 있습니다. mongo는 공식적으로 컴파일됩니다. 예, 압축을 푼 후에 사용할 수 있습니다. 해당 명령은 모두 bin 디렉터리에 있습니다.
사용 전 mongo.conf 파일을 먼저 구성하세요
port=xxxxx //代表端口号,如果不指定则默认为 27017 dbpath=/usr/local/mongodb/db //数据库路径 logpath=/usr/local/mongodb/logs/mongodb.log //日志路径 logappend=true //日志文件自动累加,而不是覆盖 fork=ture //以守护进程方式创建
데이터베이스와 데이터 테이블 모두 직접 생성이 가능합니다. 즉, 전환 없이 바로 사용할 수 있습니다. . mongo에서 직접 작성할 수도 있습니다. js 스크립트를 직접 실행할 수도 있습니다. mongo에서 _id 필드를 지정하지 않으면 자동으로 추가됩니다.
mongo의 다양한 명령
Mongo의 명령은 이러한 매우 복잡한 명령의 집합이 mongo의 쿼리를 훌륭하고 효율적으로 만듭니다. mongo의 각 테이블을 컬렉션이라고 합니다. 명령의 사용은 MySQL과 유사하며 각 컬렉션을 직접 운영하려면 데이터베이스로 전환해야 합니다. 해당 명령은 메서드(func()), 쿼리 본문({}로 작성) 및 연산자($로 시작)로 구성됩니다.
기본 명령
show dbs //查看数据库 use dbname //切换到数据库 db.createCollection('collection') //创建数据表 db.collection.drop() //删除数据表 db.dropDatabase() //删数据库 db.collection.insert({data}) //插入数据 db.collection.find() //显示数据表内全部内容
쿼리 본문
{key.attr.attr:value} //普通式 {key:{$ne|$gt|$gte|$lt|$lte|$in|$nin|$all:value}} //key满足 $oper value的值 {$or|$and|$not|$nor:[{key1:{$gt:value}},{key2:{$ne:value}}]} //用$oper同时限定key1,key2的条件 {key:{$mod{8,2}}} //取出key对8取余为2的值。 {key:{$exist:1}} //取出key列存在的值。 {key:{$type:String|Double|Array|Date|Object|Boolean|......}}//查询key类型为type的列 {key:{$regex:/pattern/}} //通过正则查询,效率较低 {$where:'this.attr.express.....'} //直接用where语句,二进制转为JS运算,较慢
find() 메서드 개선
db.collection.find(query,{要取出的列:1,不需要的列:0}) db.collection.find(query).skip(跳过的行数).limit(限制信息条数); db.collection.find(query).explain() //与MYSQL的解释语句一样。 db.collection.remove(query,[justone]) //如不指定query,全部删除;[justone]默认为false意思是查询到多个,但只删一个。
update 문
db.collection.update(query,{key:newvalue}) //注意:新值会覆盖旧值,即数据只剩下语句中定义的key db.collection.update(query, { $set:{key:newvalue}, $unset:{key:value}, $rename:{key:value}, $inc:{key:value}, ...... }, { multi:true, //改变所有符合条件的,默认为false upsert:true //没有的话刚添加,默认为false } )
Cursor
var cursorName=db.collection.fund(query,...)[.skip(num).limit(num)] //创建游标 cursorName.hasNext() //判断是否有下一个 printjson(cursorName.next()) //输出游标的下一个指向值 cursorName.forEach(function(Obj){process Obj}) //遍历操作游标
Index
db.collection.getIndexes() //查看索引 db.collection.ensureIndex({key:1/-1[,key.attr:1/-1]},{unique:1(是否唯一)},{sparse:1(是否非空)})// 添加正序/倒序索引 db.collection.dropIndex({key:1/2}) //删除索引 db.collection.reIndex() //重建用了很多出现杂乱的索引
MapReduce
MapReduce는 mongo에 내장된 매우 강력한 순회 작업 도구입니다. it map 및 Reduce 기능
db.runCommand( { mapReduce: collection, //要操作的数据表 map: function(){emit(key1,key2)}, //对key1和key2进行数据映射 reduce: function(key,value){}, //对key值和数据组value进行操作 out: <output>, query: <document>, sort: <document>, limit: <number>, finalize: <function>, scope: <document>, jsMode: <boolean>, verbose: <boolean> } )
더욱 자세한 명령은 mongo 중국어 커뮤니티 http://docs.mongoing.com/manual-zh/에서 확인할 수 있습니다.
mongo 사용자, 데이터 가져오기 및 내보내기 및 클러스터
사용자 관리
MongoDB는 기본적으로 인증을 활성화하지 않습니다. 인증을 활성화하려면 서버를 시작할 때 --auth 또는 --keyFile 옵션을 추가할 수 있습니다. 구성 파일을 사용하는 경우 security.authorization 또는 security.keyFile 설정을 사용하십시오.
MongoDB는 자체 역할을 제공하며 각 역할은 일반적인 사용 사례에 대한 명확한 역할을 제공합니다. 예를 들어 read, readWrite, dbAdmin 및 root와 같은 역할이 있습니다. 우리는 사용자 생성, 역할 생성, 사용자에게 다양한 역할 할당/재활용을 통해 사용자를 관리합니다.
역할을 추가할 때 먼저 관리자 데이터베이스에 관리자 역할을 추가한 다음 관리자 역할을 사용하여 각 라이브러리에 다른 역할을 추가해야 합니다.
use admin;(切换到admin数据库,对此库操作) db.createUser( { user: "username", pwd: "password", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) use database; db.auth('username','passwd');用超级管理员用户登陆后,整个mongo数据库皆可存取。
데이터 가져오기 및 내보내기
mongo의 자체 도구를 사용하여 가져오기 및 내보내기를 수행합니다. mongo/bin 디렉터리에서는 데이터 교환을 용이하게 하기 위해 csv 형식으로 내보내는 것이 가장 좋습니다.
./mongoexport -d dataname -c tablename -f key1,key2 -q 'query' -o ainname --csv//导出数据,默认为json格式 ./mongoimport -d dataname -c tablename --type json --file ./path //导入数据,默认为json格式
mongo 데이터베이스 클러스터
mongod를 열 때 --replSet replname 옵션을 추가합니다.
mongo 클라이언트에서 mongod 프로세스에 연결하고 관리자 데이터베이스를 입력한 다음 선언합니다. mongoconf 변수:
admin 사용;
var rsconf={_id:'replname',members[{_id:0,host:'xxx'},{_id:1,host:'xxy' }]};
클러스터를 초기화하려면 rs.initiatee(rsconf)를 사용하세요. Mongo는 자동으로 더 작은 ID 번호를 기본으로 설정하고 다른 mongod 프로세스를 보조로 설정합니다.
보조 프로세스에 연결하고 SlaveOk() 함수를 사용하여 슬레이브 프로세스를 초기화합니다.
PHP에서 mongo 데이터베이스 운영
먼저 PHP에 mongo 확장을 추가합니다(방법은 Linux의 PHP 참조). 그런 다음 스크립트에서 mongo 클래스 함수 라이브러리를 사용할 수 있습니다. MongoDB 클래스인 Mongo 클래스는 selectDB() 메소드를 통해 얻어지며, 테이블 레벨의 연산 방식을 가지고 있습니다.
일반적으로 Mongo->dbname->collection에 의해 인스턴스화되거나 MongoDB 클래스 및 데이터베이스 이름을 직접 사용하여 인스턴스화되는 MongoCollection 클래스는 데이터에 대한 기본 작업을 수행합니다.
find() 메서드를 통해 MongoCollection에서 얻은 MongoCursor 클래스에는 일반적인 커서 탐색 작업이 있습니다.다음은 일반적인 mongo 작업입니다.
cdnoss PHP에서 mongodb 데이터베이스 설치 및 사용과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!