开启分片:
1、先对数据库开启分片
切换到admin数据库,执行
db.runCommand({“enablesharding”:”$db_name”})
2、再对数据库中某集合开启分片
切换到admin数据库,执行
db.runCommand({“shardcollection”:”$db_name.$collection_name”,”key”:{“xxx”:1}})
numInitialChunks is only supported when the collection is empty and has a hashed field in the shard key pattern
在集合开启分片前,要保证shard key字段上已经建好了索引,否则会报错,且字段的升降序要一致。
创建索引:
db.$collectionName.createIndex(),创建时要指定字段的排序,1表示升序,-1表示降序。如db.col.createIndex({“title”:1}),也可以指定多个字段,如db.col.createIndex({“title”:1,”description”:-1})
查看某数据库是否开启了分片:
第一种方式:sh.status(),这个命令会把开启分片的数据库、集合都列出来。
第二章方式:查询config库的databases集合,partitioned值为true,表示对应数据库开启了分区。
查看某集合是否开启了分片:
第一种方式:db.$collectionName.stats().sharded,会返回true或fasle。
第二种方式:通过查看数据分布来判断:db.$collectionName.getShardDistribution(),如果集合没有开启分片,则会报错,提示Collection xxx is not sharded。
第三种方式:sh.status(),这个命令会把开启分片的数据库、集合都列出来,还可以看到shard key。
第四种方式:查询config库的collections集合,这个集合包含了所有开启分片的集合,还可以看到shard key。
(ShardKeyNotFound) PlanExecutor error during aggregation :: caused by :: Failed to target upsert by query :: could not extract exact shard key
原文地址:http://www.cnblogs.com/koushr/p/16852024.html