http://docs.mongodb.org/manual/reference/sql-comparison/
컬렉션을 생성한 다음 키에 대한 필드 이름의 조건
1. $로 시작할 수 없다.
2. 255 크기 내에 작성한다.
3. 연산자를 포함할 수 없다.
4. null(공백)이 중간에 들어갈 수 없다.
5. 필드 이름은 하나의 컬렉션 내에서 유일한 값으로 존재한다.
6. 전체 문서의 크기가 16M 제한적이다(네트워크의 대역폭).
7. 만일 문서가 대용량(16M 이상)이면 GridFS api를 사용해서 구현한다.
문서에 대한 정보(외부적인 상태)
1. mongod.lock : 서버의 프로세스 ID를 저장한다.
2. 0 파일(.ns) : 메타데이터를 네임스페이스 단위로 저장한다.
3. 2번의 크기는 ns 16M를 넘을 수 없다. - 28000개의 네임스페이스 하나의 데이터베이스는 컬렉션과 색인의 개수를 최대 28000개를 생성할 수 있다.
--nssize arg(=16) 사이즈는 늘일 수 있으나 16M 단위로 처리한다.
4. test.0(64M), test.1(128M) 등의 파일은 순수 데이터 파일을 저장한다. 파일의 용량은 2GB까지가 최대이다.
5. 몽고는 데이터저장소의 크기를 정적으로 관리한다.
ObjectId("555a97730bd89a172bb8ab26")
555a9773 : 타임스탬프 <4byte> 1970.1.1 표준타임
0bd89a : 서버ID <3byte> 서버측 식별자.
172b : 프로세스ID <2byte>
b8ab26 : 로컬카운터 <3byte>
<문서에 컬렉션이 추가되거나 문서가 추가될때마다 ID가 생성되며 프로세스가 생성된 ID를 카운팅해서 관리한다.>
- 색인키
- 문서 자체에서 bson 타입으로 생성해서 자동 추가된다.
- 중복없음
- 메모리를 가장 적은 크기로 차지한다.
//user_id:"eeee",age:43,status:"g"
1. my의 user_id를 출력하자.
db.my.find({},{user_id:1});
db.my.find({user_id:1},{});
2. age, status를 출력하자.
db.my.find({},{"age":1,"status":1});
3. status, user_id를 출력하자.
db.my.find({},{"status":1,"user_id":1});
4. insert into my(user_id,age,status) values('fff',45,'A');
db.my.insert({user_id:"fff",age:45,status:"A"});
db.my.insert({user_id:"zzz",status:"B"});
db.my.find();
5. status가 A인 것을 찾아라
db.my.find({status:"A"});
6. status가 A인 것을 찾아 user_id, status만 출력해라
db.my.find({status:"A"},{user_id:1,status:1});
7. select * from my where status!='A';
db.my.find({status:{$ne:"A"}});
>>>8. select * from my where status='A' and age=50;
db.my.find({status:"A",age=50});
9. select * from my where status='A'or age=50;
db.my.find({$or:[{status:"A"},{age:50}]});
10. select * from my where age>25;
db.my.find({age:{$gt:25}});
11. select * from my where age<25;
db.my.find({age:{$lt:25}});
12. select * from my where age>25 and age<=50;
db.my.find({age:{$gt:25,$lte:50}});
13. select * from my where user_id like '%bc%';
db.my.find({user_id:/bc/});
14. select * from my where user_id like 'ff%';
db.my.find({user_id:/^ff/});
15. select * from my where status='A' order by user id ASC;
db.my.find({status:"A"}).sort({user_id:1});
16. select * from my where status='A' order by user id desc;
db.my.find({status:"A"}).sort({user_id:-1});
17. select count(*) from my;
db.my.count();
db.my.find().count(); --해봐
18. select count(user_id) from my;
db.my.count({user_id:1});
db.my.count({user_id:{$exists:true}});