MongoDB 샤딩된 컬렉션 풀기?

아래와 같은 방법으로 하면…

database = 'rnr_sessions'
collection = database + '.sessions'
 
sh.stopBalancer()
primary = db.databases.findOne({_id: database}).primary
 
// move all chunks to primary
db.chunks.find({ns: collection, shard: {$ne: primary}}).forEach(function(chunk){
    print('moving chunk from', chunk.shard, 'to', primary, '::', tojson(chunk.min), '-->', tojson(chunk.max));
    sh.moveChunk(collection, chunk.min, primary);
});
 
// unshard
db.collections.remove({ "_id" : collection })
db.chunks.remove({ ns : collection })
 
// flush all mongos, is this neccessary?!
use admin
db.runCommand({ flushRouterConfig: 1 })

참고자료) [Command to unshard a collection]

MongoDB 샤딩을 사용하는 환경에서의 제약 사항들

매번 찾아보지만 도무지 외워지질 않는 이 녀석들!!!

group 사용 불가능 -> mapReduce 또는 aggregate 사용하는 것으로 변경해야 함

db.eval() 사용 불가능

$where 함수에서 DB 오브젝트 참조 불가능

$isolated 를 update 관련에서 사용 불가능

$snapshot 쿼리 불가능

geoSearch 명령 불가능

covered query 불가능

기타 등등 많군요.

참고 자료) [MongoDB Limits ans Thresholds]