>  기사  >  백엔드 개발  >  PHP에서 MongoDB 사용법

PHP에서 MongoDB 사용법

巴扎黑
巴扎黑원래의
2016-11-09 14:00:121378검색

1. Mongodb 기본 개념
1. Mongodb 데이터베이스 명명 규칙:
은 빈 문자열("")이 될 수 없습니다.
은 ''(공백), ., $, /, 및

D:mongodbbin>mongo
또는 Windows 탐색기에서 C:mongobin으로 이동하여 mongo.exe를 두 번 클릭합니다.
어떤 방법을 선택하든 쉘이 시작됩니다.
MongoDB 쉘 버전: 1.6.5
connecting to: test
>
이제 테스트 서버에 연결되었습니다.
2.Linux에서의 MongoDB 설치 및 구성
1. 32비트 Linux의 경우
$ 컬 http://downloads.mongodb.org/linux/mongodb-linux-i686-1.4.4.tgz > mongo.tgz
$ tar xzf mongo.tgz
64비트 Linux용
$ 컬 http://downloads.mongodb.org/linux/mongodb-linux-x86_64-1.4.4.tgz > mongo .tgz
$ tar xzf mongo.tgz 컬이 설치되지 않은 경우 apt-get install 컬을 설치합니다
2. 기본적으로 MongoDB는 /data/db/ 폴더에 데이터를 저장합니다. 폴더를 수동으로 생성해야 합니다. 다음과 같이 생성합니다: $ adduser mongodb $ passwd mongodb $ sudo mkdir -p /data/db/ $ sudo chown `id -u` /data/db $ chown -R mongodb:mongodb /data 물론 다음을 통해 지정할 수 있습니다. --dbpath 명령 MongoDB는 데이터를 다른 디렉터리에 저장합니다.
3. 콘솔에서 데이터베이스를 실행합니다: $ nohup ./mongodb-xxxxxxx/bin/mongod & $ ./mongodb-xxxxxxx/bin/mongo > db.foo.save( { a : 1 } ) > db .foo .find() 결과는 다음과 같습니다: { "_id" : ObjectId("4cd181a31415ffb41a094f43"), "a" : 1 } OK! !
2. Mongodb 지침 및 관련 작업
a) show 명령
ii. 현재 모든 데이터베이스를 보려면 dos에 show db를 입력하세요
> show dbs
admin
alphabet
color
colors
local
mymongo
test
>
iii. show collections 현재 데이터베이스의 모든 테이블 보기
> mymongo 사용
db mymongo로 전환
> show collections
colors
shell.colors
system.indexes
>
b) 명령 사용
i. 현재 사용해야 하는 데이터베이스를 지정하고, 그렇지 않은 경우 새 라이브러리를 만듭니다. 이 라이브러리에 데이터가 없으면 일정 시간이 지나면 시스템이 삭제됩니다
ii. [데이터베이스 이름]
c) 삽입 명령
i.json 형식으로 데이터를 추가합니다
ii. 삽입할 경우 추가된 데이터에 테이블이 없으면 새로운 테이블이 생성되고
iii.db.[테이블명].insert()
> db.dingdan 테이블에 데이터가 추가됩니다. insert(
. .. {
... order_id: 109384,
... order_date: new Date("12/04/2010"),
... 고객: {
... 이름: "Joe Bloggs",
... 회사: "XYZ Inc.",
... 전화: "(555) 123-4567"
... },
... 결제 : {
... 유형: "현금",
... 금액: 4075.99,
...paid_in_full: true
... },
... 항목: [
... {
... sku: "ABC1200",
... 설명: "샘플 제품",
... 수량: 1,
... 가격당_단위 : 75.99,
... }, {
... sku: "XYZ3400",
... 설명: "비싼 제품",
... 수량: 2,
...            단위당 가격: 2000
...                                                                                                                           🎜>d) 저장 명령
i. 데이터 저장
ii. 테이블에
iii. 테이블에 데이터가 있으면 새 데이터를 수정합니다.
iv.db.[테이블 이름].save()
db.collection.save( x )
x 업데이트할 개체이며 단일 레코드만 될 수 있습니다.
컬렉션의 x 객체와 동일한 "_id"를 가진 레코드가 이미 있는 경우. Mongodb는 컬렉션의 기존 레코드를 x 개체로 대체합니다. 그렇지 않으면 x 개체가 삽입됩니다. x에 _id가 없으면 시스템이 자동으로 생성하여 삽입합니다. 이는 위 업데이트 문에서 upsert=true 및 multi=false인 상황과 동일합니다.

db.test0.save({count:40,test1:"OK"}); _id 시스템이
db.test0.save({_id:40,count:40,test1:"OK"를 생성합니다. } ); test0에 40과 같은 _id가 있으면 교체되고, 그렇지 않으면 삽입됩니다.
e) 제거 명령
i. 테이블에 지정된 데이터 삭제
ii.db.[테이블 이름].remove()
색상 테이블에 레코드 추가
> db .colors.save({"color":"112233"})
> db.colors.find()
{ "_id" : ObjectId("4e9bc2024fadb58af17b2f01"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc2374fadb58af17b2f02"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc2384fadb58af17b2f03"), "color" : "ff0000" }
{ " _id" : ObjectId("4e9bc2394fadb58af17b2f04"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc2394fadb58af17b2f05"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23a4fadb58af17b2f06"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23a4fadb58af17b2f07"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23b4 fadb58af17b2f08 "),"색상 ":"ff0000 "} { "_id" : ObjectId("4e9bc23c4fadb58af17b2f0b"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23d4fadb58af17b2f0c"), "color" : "ff0000 " }
{ "_id" : ObjectId("4e9e3f435240000000005a2d"), "color" : "112233" }
추가된 레코드 삭제
> db.colors.remove({"color":" 112233"})
> db.colors.find()
{ "_id" : ObjectId("4e9bc2024fadb58af17b2f01"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc2374fadb58af17b2f02 "), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc2384fadb58af17b2f03"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc2394fadb58af17b2f04"), " color" : "ff0000" }
{ "_id" : ObjectId("4e9bc2394fadb58af17b2f05"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23a4fadb58af17b2f06"), "color" : " ff0000" }
{ "_id" : ObjectId("4e9bc23a4fadb58af17b2f07"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23b4fadb58af17b2f08"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23b4fadb58af17b2f09"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23c4fadb58af17b2f0a"), "color" : "ff0000" }
{ " _id" : ObjectId("4e9bc23c4fadb58af17b2f0b"), "color" : "ff0000" }
{ "_id" : ObjectId("4e9bc23d4fadb58af17b2f0c"), "color" : "ff0000" }
f) 업데이트 명령
i.데이터 수정
ii.db.[테이블 이름].update()
db.collection.update( 기준, objNew, upsert, multi )

기준: 쿼리 조건 업데이트, 유사 sql 업데이트 쿼리에서 개체 및 일부 업데이트 연산자(예: $, $inc...) 등을 업데이트한 후

objNew로 전송하는 것은 sql 업데이트 쿼리에서 설정한 후

upsert로 이해될 수도 있습니다. 이 매개변수의 의미는 업데이트 기록이 없는 경우 objNew를 삽입할지 여부이며, 기본값은 false이며 삽입하지 않는다는 의미입니다.
multi: mongodb의 기본값은 false입니다. 이 매개변수가 true인 경우 조건에 따라 발견된 여러 레코드가 모두 업데이트됩니다.

예:

db.test0.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); 하나의 기록

db.test0.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); .test0.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false ); 첫 번째 항목만 추가됩니다
db.test0 .update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ); 모두 추가됨
db.test0. " : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );모두 업데이트됨
db.test0.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );첫 번째 항목만 업데이트됩니다

g) find 명령
i. 데이터를 쿼리하려면 건너뛰기 및 제한 메서드와 함께 사용하여 페이징 효과를 얻을 수 있습니다.
ii. db.[테이블 이름].find({}).skip([num1]).limit([num2]), num1이 시작하는 데이터 조각, num2는 쿼리된 데이터 수입니다. 데이터가 부족하면 나머지 데이터가 우선합니다
iii.db.[테이블 이름].find({[_id:{ < : num }]}) 괄호 안은 쿼리 조건의 예입니다. 기타 관계 연산자 대신 번역 문자를 사용하십시오.
> zm 사용
db zm으로 전환
> db.zm.find().skip(10).limit(5);
{ "_id" : ObjectId("4e9e3d6b5240000000005a1c"), "char" : "k", "code" : 107 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1d"), "char" : "l", "code" : 108 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1e"), "char" : "m", "code" : 109 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1f"), "char" : "n", "code" : 110 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a20"), "char" : "o", "code" : 111 }
>
h) findOne 명령
i. 첫 번째 명령
ii.db.[테이블 이름].findOne()
> db.zm.findOne()
{ "_id" : ObjectId("4e9e3d6b5240000000005a12"), "char" : "a ", "code" : 97 }
참고: findOne의 O는 대문자여야 합니다.
i) 함수
i. 사용자 지정 함수, 정의 후 직접 호출할 수 있습니다.
ii. function testFunction(op1,op2,op3...){}
iii. ( op1,op2,op3...){}
iv. 정의된 함수를 직접 호출할 수 있으며, return을 사용하여 데이터를 반환할 수 있습니다
> function testFunction(){
... db. zm.remove({ "코드":{$in:[100,101,102,103]}})
... return db.zm.find({})
... }
> testFunction()
{ "_id " : ObjectId("4e9e3d6b5240000000005a12"), "char" : "a", "code" : 97 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a13"), "char" : "b" , "code" : 98 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a14"), "char" : "c", "code" : 99 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a19") , "char" : "h", "code" : 104 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1a"), "char" : "i", "code" : 105 }
{ "_id " : ObjectId(" 4e9e3d6b5240000000005a1b"), "char" : "j", "code" : 106 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1c"), "char" : "k", "code" : 107 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1d"), "char" : "l", "code" : 108 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1e"), "char" : "m", " 코드" : 109 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a1f"), "char" : "n", "code" : 110 }
{ "_id" : ObjectId(" 4e9e3d6b5240000000005a20"), " char" : "o", "code" : 111 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a21"), "char" : "p", "code" : 112 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a22"), "char" : "q", "code" : 113 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a23"), "char" : "r", " code" : 114 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a24"), "char" : "s", "code" : 115 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a25"), " char" : "t ", "code" : 116 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a26"), "char" : "u", "code" : 117 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a27" ), "char" : "v", "code" : 118 }
{ "_id" : ObjectId("4e9e3d6b5240000000005a28"), "char" : "w", "code" : 119 }
{ " _id" : ObjectId("4e9e3d6b5240000000005a29"), "char" : "x", "code" : 120 }
has more
j) var
i. >ii.JS와 동일 의 var와 동일합니다.
1. var [name]의 명명도 js 변수 명명 규칙과 일치합니다.
k) 인쇄 명령
i. 인쇄에 사용됩니다
ii.print([Strings]);
iii.인쇄 개체가 mongo 데이터인 경우 인식되지 않습니다.
l) printJson 명령
i. 데이터 인쇄에 사용됩니다
ii. printJson([json]);
m) 종료
i. 데이터베이스 이름 사용
관리자로 전환
>db.shutdownServer();
서버가 다운되어야 합니다...
MongoDB는 다음을 포함한 다양한 조건부 연산자를 지원합니다:
? $lt(보다 작음)
? $lte(보다 작거나 같음)
? $gt(보다 큼)
? $gte(보다 크거나 같음) $all(배열의 모든 값과 일치)
? $exists(필드가 존재하는지 확인)
? $ne(같지 않음)
?(배열에서 하나 이상의 값과 일치)
? $nin(배열에 있는 하나 이상의 값과 일치)
? $or(둘 중 하나의 쿼리와 일치)
? $nor(쿼리와 일치하지 않음)
? $size(미리 결정된 수의 요소와 일치)
? $type(지정된 BSON 데이터 유형과 일치하는 값)
? $not(같지 않음)
db.table name.find({필드 이름:{$gt:100}})
mongodb 업데이트 연산자 :

1) $inc

사용법: { $inc : { 필드 : 값 } }

은 숫자 필드에 값을 추가하는 것을 의미합니다. 예:

> db.test0.find( { "_id" : 15 } );

{ "_id" : { " floatApprox" : 15 }, "count" : 16, "test1" : "TESTTEST", "test2 " : "OK", "test3" : "TESTTEST", "test4" : "OK", "test5" : "OK " }

> db.test0.update( { "_id" : 15 } , { $inc : { "count" : 1 } } );
> db.test0.find( { "_id" : 15 } ) ;
{ "_id" : { "floatApprox" : 15 }, "count" : 17, "test1" : "TESTTEST", "test2" : "OK", "test3" : "TESTTEST", "test4" : "OK", "test5" : "OK" }

> db.test0.update( { "_id" : 15 } , { $inc : { "count" : 2 } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 19, "test1" : "TESTTEST", "test2" : "OK", "test3" : "TEESTTEST", "test4" : "OK", "test5" : "OK" }

> db.test0.update( { "_id" : 15 } , { $inc : { "count" : -1 } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : "TESTTEST", "test2" : "OK", "test3" : "TESTTEST", "test4" : "OK", "test5" : "OK" }


2) $set

사용법: { $set : { field : value } }

는 SQL의 set field = value와 동일하며 모든 데이터 유형은 $set 를 지원합니다. 예:
> db.test0.update( { "_id" : 15 } , { $set : { "test1" : "testv1","test2" : "testv2","test3" : "testv3"," test4" : "testv4" } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18 , "test1" : "testv1", "test2" : "testv2", "test3" : "testv3", "test4" : "testv4", "test5" : "OK" }

3) $ unset

사용법: { $unset : { field : 1} }

이름에서 알 수 있듯이 필드를 삭제합니다. 예:
> db.test0.update( { "_id" : 15 } , { $unset : { "test1":1 } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test2" : "testv2", "test3" : "testv3", "test4" : "testv4", " test5" : "확인" }

> db.test0.update( { "_id" : 15 } , { $unset : { "test2": 0 } } );
> db.test0. find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test3" : "testv3", "test4" : "testv4", " test5" : "OK" }

> db.test0.update( { "_id" : 15 } , { $unset : { "test3":asdfasf } } );
금 5월 14일 16시: 17:38 JS 오류: ReferenceError: asdfasf가 정의되지 않았습니다(셸):0

> db.test0.update( { "_id" : 15 } , { $unset : { "test3":"test" } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test4" : " testv4", "test5" : "OK" }

field: 1의 1이 무엇에 사용되는지 모르겠습니다. 어쨌든 뭔가만 있으면 괜찮을 것입니다.

4) $push
사용법: { $push : { field : value } }

필드가 배열 유형인 경우 필드에 값을 추가합니다. not 존재하는 경우 새 배열 유형이 추가됩니다. 예:

> db.test0.update( { "_id" : 15 } , { $set : { "test1" : ["aaa","bbb"] } } );
> db .test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "aaa", "bbb" ], "test4" : "testv4", "test5" : "확인" }

> db.test0.update( { "_id" : 15 } , { $push : { "test1": "ccc" } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ " aaa", "bbb", "ccc" ], "test4" : "testv4", "test5" : "확인" }

> db.test0.update( { "_id" : 15 } , { $push : { "test2": "ccc" } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "aaa", "bbb", "ccc" ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "OK" }

> db.test0.update( { "_id" : 15 } , { $push : { "test1": ["ddd","eee"] } } );
> db.test0 .find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "aaa", "bbb", "ccc" , [ "ddd", "eee" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "확인" }
5) $pushAll

사용법: { $pushAll : { field : value_array } }

한 번에 여러 값을 배열 필드에 추가할 수 있다는 점을 제외하면 $push와 동일합니다. 예:

> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "aaa", "bbb", "ccc", [ "ddd", "eee" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "확인" }

> db.test0.update( { "_id" : 15 } , { $pushAll : { "test1": ["fff","ggg"] } } );
> db.test0 .find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "aaa", "bbb", "ccc" , [ "ddd", "eee" ], "fff", "ggg" ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "확인" }

6)$addToSet
사용법: { $addToSet : { 필드 : 값 } }

배열에 값을 추가하고, 값이 배열에 없는 경우에만 추가하세요. 예:
> db.test0.update( { "_id" : 15 } , { $addToSet : { "test1": {$each : ["444","555"] } } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [
"aaa",
"bbb",
"ccc",
[
"ddd",
"eee"
],
"fff",
"ggg",
[
"111",
"222"
],
"444",
"555"
], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "확인" }
> db.test0.update( { "_id" : 15 } , { $addToSet : { "test1": {$each : ["444 ","555"] } } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [
"aaa",
"bbb",
"ccc",
[
"ddd",
"eee"
],
"fff",
"ggg",
[
"111",
"222"
],
"444",
"555"
], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "확인" }
> db.test0.update( { "_id" : 15 } , { $ addToSet : { "test1": ["444","555"] } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox " : 15 }, "count" : 18, "test1" : [
"aaa",
"bbb",
"ccc",
[
"ddd",
"eee"
],
"fff",
"ggg",
[
"111",
"222"
],
"444 ",
"555",
[
"444",
"555"
]
], "test2" : [ "ccc" ], "test4" : " testv4", "test5" : "확인" }
> db.test0.update( { "_id" : 15 } , { $addToSet : { "test1": ["444","555"] } } ) ;
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [
"aaa",
"bbb",
"ccc",
[
"ddd",
"eee"
],
"fff",
"ggg",
[
"111",
"222"
],
"444",
"555",
[
"444" ,
"555"
]
], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "확인" }


7) $pop

배열에서 값 삭제

사용법:
마지막 값 삭제: { $pop : { field : 1 } }
첫 번째 값 삭제 값: { $pop : { field : -1 } }

한 개의 값만 삭제할 수 있다는 점, 즉 1 또는 -1만 사용할 수 있고 2 또는 -2는 사용할 수 없다는 점에 유의하세요. 두 개의 값을 삭제합니다. mongodb 1.1 이상 버전만 사용할 수 있습니다. 예:
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count " : 18, "test1" : [
"bbb",
"ccc",
[
"ddd",
"eee"
],
"fff " ,
"ggg",
[
"111",
"222"
],
"444"
], "test2" : [ "ccc" ] , "test4" : "testv4", "test5" : "확인" }
> db.test0.update( { "_id" : 15 } , { $pop : { "test1": -1 } } ) ;
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [
" ccc",
[
"ddd",
"eee"
],
"fff",
"ggg",
[
"111" ,
"222"
],
"444"
], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "확인" }
> db.test0.update( { "_id" : 15 } , { $pop : { "test1": 1 } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "ccc", [ "ddd", "eee" ], "fff", "ggg", [ " 111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4",
"test5" : "OK" }

8) $pull

사용법: $pull : { field : value } }

배열 필드에서 value와 동일한 값을 삭제합니다. 예:
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "ccc ", [ "ddd", "eee" ], "fff", "ggg", [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4",
"test5" : "확인" }

> db.test0.update( { "_id" : 15 } , { $pull : { "test1": "ggg" } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "ccc", [ "ddd ", "eee" ], "fff", [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5"
: "확인" }

9) $pullAll

사용법: { $pullAll : { field : value_array } }

$pull과 마찬가지로 배열에서 여러 값을 삭제할 수 있습니다. 한 번에. 예:
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ "ccc ", [ "ddd", "eee" ], "fff", [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5"
: "확인" }

> db.test0.update( { "_id" : 15 } , { $pullAll : { "test1": [ "ccc" , "fff" ] } } );
> db.test0.find( { "_id" : 15 } );
{ "_id" : { "floatApprox" : 15 }, "count" : 18, "test1" : [ [ "ddd", "eee" ], [ "111", "222" ] ], "test2" : [ "ccc" ], "test4" : "testv4", "test5" : "확인" }


10) $ 연산자

$는 자신의 의미로, 조건에 따라 자신이 찾은 배열의 항목을 나타냅니다.
> t.find()
{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] }

> t.update( {'comments.by':'joe'}, {$inc:{'comments .$.votes':1}}, false, true )

> t.find()
{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", " comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }

$는 발견된 첫 번째 배열 항목만 적용하고 나머지는 무시된다는 점에 유의해야 합니다. 예를 살펴보겠습니다.

> t.find();
{ "_id" : ObjectId("4b9e4a1fc583fa1c76198319"), "x" : [ 1, 2, 3, 2 ] }
> t.update({x: 2}, {$inc: {"x.$": 1}}, false, true);
> t.find();

다른 것 참고로 $를 $unset과 함께 사용하면 null 배열 항목이 남지만 {$pull:{x:null}}을 사용하여 모든 null 배열 항목을 삭제할 수 있습니다. 예:
> t.insert({x: [1,2,3,4,3,2,3,4]})
> t.find()
{ "_id" : ObjectId ("4bde2ad3755d00000000710e"), "x" : [ 1, 2, 3, 4, 3, 2, 3, 4 ] }
> t.update({x:3}, {$unset:{"x. $":1}})
> t.find()
{ "_id" : ObjectId("4bde2ad3755d00000000710e"), "x" : [ 1, 2, null, 4, 3, 2, 3, 4 ] }

{ "_id" : ObjectId("4b9e4a1fc583fa1c76198319"), "x" : [ 1, 3, 3, 2 ] }
Mongodb에서 인덱스 생성:
db.[테이블 이름].ensureIndex( { num1: 1,num2:-1}) num1과 num2는 인덱싱을 위한 필드입니다
인덱스를 구축할 때 다음 질문을 고려해야 합니다.
(1) 어떤 종류의 쿼리가 수행될까요? 어떤 키를 인덱싱해야 합니까?
(2) 각 키의 인덱스 방향은 무엇인가요?
(3). 확장에 대처하는 방법은 무엇입니까? 자주 사용되는 데이터를 메모리에 더 많이 보관할 수 있는 다른 키 배열이 있습니까?
db.[테이블 이름].ensureIndex({num1: 1,num2:-1},{"Background":true})//오래 지속되는 인덱스 수정
db.runCommand({"dropIndexes": "foo", "index":"alphabet"})
모든 인덱스를 삭제하려면 index 값을 *에 할당하면 됩니다.
Mongodb의 마스터-슬레이브 복제
마스터-슬레이브 복제는 데이터베이스 백업, 장애 복구, 읽기 확장 등에 사용할 수 있습니다. (현재 슬레이브 노드에서 복제할 수 있는 메커니즘은 없습니다.)
1. mongod –master를 실행하여 마스터 서버를 시작합니다.
2. mongod –slave –source master_address를 실행하여 슬레이브 서버를 시작합니다. (master_address는 마스터 노드의 주소입니다.)
3. 마스터 노드용 디렉터리를 생성하고 포트(10000)를 바인딩합니다.
$mkdir –p ~/dbs/master
$ ./mongod – dbpath ~/ dbs/master –port 10000 –master
4. 슬레이브 노드 디렉터리 설정(다른 디렉터리 및 포트 선택)
$mkdir –p ~/dbs/slave
$ ./mongod –dbpath ~/dbs/slave –port 10001 –slave –source
localhost: 10000
옵션: -only(슬레이브 노드에서 특정 데이터베이스만 복사하도록 지정)
-slavedelay(슬레이브 노드에서 사용, 마스터 노드 적용 시 동작 중 지연 추가)
-fastsync (마스터 노드의 데이터 스냅샷을 기반으로 슬레이브 노드 시작 및 마스터-슬레이브 동기화 구현)
-autoresync (마스터-슬레이브 동기화 자동 재개)
-oplogSize (마스터 노드 oplog 크기 단위는 MB) ​​
3. Mongodb의 GridFS
mongodb는 대용량 데이터 저장을 지원하기 때문에 대용량 데이터 저장을 지원할 수 있는 분산 파일 시스템인 GirdFS도 함께 제공됩니다. mongodb에는 최대 4MB의 대용량 객체를 저장할 수 있는 BSON 문서 객체도 있습니다. . 크기 제한이 없어도 BSON은 빅데이터에 대한 빠른 범위의 쿼리를 충족할 수 없으므로 mongodb는 GridFS를 도입했습니다.
4. PHP에서 코드로 테스트:
MySQL과 마찬가지로 mongoDB는 PHP 확장 라이브러리 .dll 형식으로 PHP와 통합됩니다.
다음 웹사이트로 이동하여 Windows에서 해당 PHP 버전의 dll 파일을 다운로드하세요:
http://cn.php.net/manual/en/mongo.installation.php#mongo.installation.windows
자신의 PHP 버전에 따라 스레드 안전 여부(phpinfo에서 확인 가능) 등에 따라 해당 버전을 선택하여 다운로드하고 압축을 풀고 php_mongo.dll 파일을 가져옵니다. PHP 설치 디렉터리의 ext 디렉터리에 복사합니다. 추가: Extension = php_mongo.dll;
php.ini 파일에서 웹 서버(apache 또는 nginx)를 다시 시작합니다. phpinfo에서 mingoDB 정보를 볼 수 있어야 합니다. 그렇지 않으면 설치 문제가 있습니다. 다운로드한 mingoDB 확장이 올바르지 않을 수 있습니다.
PHP는 mongodb를 운영합니다
1. mongoDB와 연결 설정:
mongo 클래스 직접 인스턴스화 + 연결 생성:
$mo = new Mongo();//Mongo 연결 개체 가져오기
인스턴스 Mongo 클래스를 생성하고 기본 localhost:27017 포트 mongoDB와 연결을 설정합니다.
다른 호스트에 연결하려면 다음과 같이 작성할 수 있습니다.
$mongo = new Mongo("mongodb://username:password@192.168.1.22:12345");
다른 방법으로는, 예 mongo 클래스를 mongo 클래스로 변환한 다음 수동으로 연결을 설정합니다.
$mongo= newMongo("mongodb://username:password@192.168.1.22:12345",array('connect'=>false)) ;//초기화 클래스
$mongo->connect();//연결 만들기
Mongo 클래스의 몇 가지 유용한 메서드:
Mongo::listDBs()
데이터베이스( DB) 현재 mongo 서비스 배열에 대한 정보입니다.
$mo = new Mongo();
$dbs = $mo->listDBs();//db 정보가 포함된 배열 가져오기
Mongo::selectCollection($db,$coll)
현재 연결되어 있는 특정 DB의 컬렉션 객체를 반환합니다.
$mo = new Mongo();
$coll = $mo->selectCollection('db','mycoll');//컬렉션 개체 가져오기
원하는 데이터베이스 선택(Mongo 클래스):
한 가지 방법:
$mongo = new Mongo();
$db = $mongo->foo;//MongoDB 객체 가져오기
다른 방법:
$mongo = new Mongo( );
$db = $mongo->selectDB('foo');//MongoDB 객체 가져오기
MongoDB의 유용한 기능:
MongoDB 객체 생성
$mo = new Mongo() ;
$db = new MongoDB($mo,'dbname');//MongoDB 객체 생성을 통해 획득
현재 DB 삭제
$db = $mo->dbname
$db; ->drop();
현재 데이터베이스 이름 가져오기
$db = $mo->dbname;
$db->_tostring();
원하는 컬렉션 선택:
A:
$mo = new Mongo();
$coll = $mo->dbname->collname;//컬렉션 객체 가져오기
B:
$db = $mo ->selectDB(' dbname');
$coll = $db->collname;
C:
$db = $mo->dbname;
$coll = $db->selectCollectoin( 'collname'); //컬렉션 객체 가져오기
데이터 삽입(MongoCollection 객체):
MongoCollection::insert(array $a,array $options)
array $a 삽입할 배열
array $options 옵션
작업 결과 반환 여부 안전 정보
fsync가 물리적 하드디스크에 직접 삽입되는지 여부

$coll = $mo->db->foo;
$a = array('a'=>'b');
$options = array('safe'=>true);
$rs =$coll->insert($a,$options);
$rs는 작업 정보를 포함하는 배열형 배열입니다
(MongoCollection 개체)의 데이터베이스 레코드 삭제:
MongoCollection::remove(array $criteria,array $options)
array $criteria Conditions
array $options Options
safe 작업 반환 여부 result
fsync 물리적 하드디스크에 직접적인 영향을 미치는지
justOne 하나의 레코드에만 영향을 미치는지

$coll = $mo->db->coll;
$c = array(' a'=>1,' s'=>array('$lt'=>100));
$options = array('safe'=>true);
$rs = $coll->제거 ($c,$options) ;
$rs는 작업 정보가 포함된 배열 유형 배열입니다.
데이터베이스(MongoCollection 개체)의 업데이트 레코드:
MongoCollection::update(array $criceria,array $newobj ,array $options)
array $criteria 조건
array $newobj 업데이트할 내용
array $options 옵션
연산 결과 반환 여부 안전
fsync 물리적 하드에 직접적인 영향을 미치는지 여부 disk
일치하는 데이터가 없는지 upsert 새
여러 항목을 추가하여 조건을 충족하는 모든 레코드에 영향을 미치는지 확인하세요. 기본적으로 하나의

$coll = $mo-에 영향을 미칩니다. >db->coll;
$c = array('a' =>1,'s'=>array('$lt'=>100));
$newobj = array('e'= >'f','x'=>'y');
$options = array('safe'=>true,'multiple'=>true);
$rs = $coll->remove( $c,$newobj,$options);
$rs는 작업 정보를 포함하는 하나의 배열 유형 배열입니다.
단일 레코드를 얻기 위한 쿼리 컬렉션(MongoCollection 클래스):
array MongoCollection::findOne(array $query,array $fields)
array $query 조건
array $ fields 가져올 필드

$coll = $mo->db->coll;
$query = array(' s'=>array('$lt'=>100));
$fields = array('a'=>true,'b'=>true);
$rs = $coll->findOne ($query,$fields);
결과가 있으면 배열을 반환하고, 결과가 없으면 NULL을 반환합니다.
여러 레코드를 얻기 위한 쿼리 컬렉션(MongoCollection 클래스):
MongoCursor MongoCollection:: find(array $query,array $fields)
array $query 조건
array $ fields 가져올 필드

$coll = $mo->db->coll;
$query = array('s'=>array('$lt'=>100));
$fields = array('a'=>true,'b'=>true);
$cursor = $coll ->find($query,$fields);
커서 레코드 개체 MongoCursor를 반환합니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.