MongoDB之基本命令
1. 数据库
1. 查看命令帮助 db.help()
2. 切换/创建数据库 use yangjianbo; 库存在就切换;不存在就创建
还有一种切换数据库方式,在客户端登录mongo时,指定库 mongo --host 192.168.2.231:16535 zhenpin
3. 查询所有数据库 show dbs;
4. 删除当前数据库 db.dropDatabase();
5. 从指定主机上克隆数据库到当前数据库 db.cloneDatabase("192.168.1.100");
6. 从指定主机上复制指定数据库数据到某个数据库 db.copyDatabase("mydb","temp","192.168.1.100");
7. 修复当前数据库 db.repairDatabase(); 整理碎片并回收磁盘空间,修复期间会产生锁,生产环境要慎用
8. 查看当前使用的数据库 db.getName();或者db;
9. 显示当前db状态 db.stats();
{
"db" : "zhenpin",
"collections" : 3,
"views" : 0,
"objects" : 148258, 表示当前数据库所有collection总共有多少行数据。显示的数据是一个估计值
"avgObjSize" : 126.7042385571099, 表示每行数据是大小,也是估计值,单位是bytes
"dataSize" : 18784917, 当前数据库所有数据的总大小,不是指占有磁盘大小。单位是bytes
"storageSize" : 7876608, 表示当前数据库占有磁盘大小,单位是bytes,因为mongodb有预分配空间机制,为了防止当有大量数据插入时对磁盘的压力,因此会事先多分配磁盘空间。
"numExtents" : 0,
"indexes" : 7,
"indexSize" : 5984256, 表示索引占有磁盘大小
"fsUsedSize" : 8974680064, 表示当前数据库预分配的文件大小
"fsTotalSize" : 53660876800,
"ok" : 1,
"operationTime" : Timestamp(1660285596, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1660285596, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
10. 查看数据库版本 db.version();
11. 查看当前数据库的连接地址 db.getMongo();
12. 查看之前的错误信息 db.getPrevError();
13. 清除错误信息 db.resetError();
2. 集合
1. 创建一个集合
db.createCollection("student");
2. 创建一个固定集合
db.createCollection("student",{size:20,capped:true,max:100});
capped 是否启用集合限制
size 限制集合使用空间的大小,单位为kb
max 集合中最大条数限制
autoIndexId 是否使用_id作为索引
db.runCommand({"convertToCapped":"stuent",size:10000}) 将普通集合转换为固定集合
db.collection.isCapped() 检查一个集合是否固定集合
2. 显示当前数据库中的集合
show collections;
db.getCollectionNames();
3. 使用集合
db.集合名
db.student
db.getCollection("student");
4. 查看集合命令帮助文档
db.student.help();
5. 查看当前集合的数据条数
db.student.count();
6. 查看当前集合数据大小
db.student.dataSize(); 单位是字节
7. 查看集合索引大小
db.student.totalIndexSize();
8. 为集合分配的空间大小,包括未使用的空间
db.student.storageSize();
9. 显示集合总大小,包括索引和数据的大小和分配空间的大小
db.student.totalSize();
10. 显示当前集合所在的db
db.student.getDB();
11. 显示当前集合的状态
db.student.stats();
12. 集合的分片版本信息
db.student.getShardVersion();
13. 集合重命名
db.student.renameCollection("student1");
db.getCollection("student").renameCollection("student1");
14. 显示当前db所有集合的状态信息
db.printCollectionStats();
15. 删除当前集合
db.student.drop();
3. 文档(CURD)
1. 写入文档
1. db.collection.insert() 可以插入单个文档,也可以插入多个文档
1. 插入一条记录
db.student.insert({"name":"lihaijie","age":35});
2. 插入多条记录
db.student.insert([{"name":"lihaijie","age":35},{"name":"houxiuyan","age":36}]);
批量插入的时候,需要使用数组,使用[ ]
2. db.collection.insertOne()
这是mongodb3.2以后的功能
db.student.insertOne({"name":"maojiangzhong","age":37});
3. db.collection.insertMany()
这是mongodb3.2以后的功能
db.student.insertMany([{"name":"maojiangzhong","age":37},{"name":"hongbing","age":27}]);
2. 查看文档
1. db.collection.find(); 查看所有的文档
db.discoveryinfo.find({"_id":4},{"title":1}) 查询id为4的文档,只列出title字段
db.discoveryinfo.find({"_id":{$in:[826,827]}},{"title":1,"resoures":1}) 查询id为826,827的文档,只列出title和resources字段
2. db.collection.findAndModify()
1. 语法
db.collection.findAndModify({
query: <document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>,
bypassDocumentValidation: <boolean>,
writeConcern: <document>,
collation: <document>
});
2. 查找并修改文档
db.student.findAndModify({query:{"name":"maojiangzhong"},sort:{"age":1},update:{"age":50},upsert:true});
3. 查找并删除
db.student.findAndModify({query:{"age":50},sort:{"_id":1},remove:true});
3. db.collection.findOne()
1. 语法
db.collection.findOne(query,projection)
第一个参数是查询条件,第二个参数是列出条件
2. 查找一个文档,并列出某个字段
db.student.findOne({"name":"lihaijie","age":38},{"age":1});
4. db.collection.findOneAndDelete(filter,options)
1. 语法
db.collection.findOneAndDelete(
<filter>, #过滤条件
{
projection: <document>, #列出字段
sort: <document>, #排序规则
maxTimeMS: <number>, #
collation: <document>
}
)
2. 查找一个文档并删除,列出文档的某个字段
db.student.findOneAndDelete({"name" : "lihaijie", "age" : 38},{projection:{"age":1}})
5. db.collection.findOneAndReplace(filter,replacement,options)
1. 语法
db.collection.findOneAndReplace(
<filter>,
<replacement>,
{
projection: <document>,
sort: <document>,
maxTimeMS: <number>,
upsert: <boolean>,
returnNewDocument: <boolean>,
collation: <document>
}
)
2. 查找一个文档并替换为新的文档,返回被替换的文档
db.student.findOneAndReplace({"name":"lihaijie"},{"name":"lihaijie","age":39},{sort:{"age":-1}});
6. db.collection.findOneAndUpdate()
1. 语法
db.collection.findOneAndUpdate(
<filter>,
<update>, #必须包含修改操作符
{
projection: <document>,
sort: <document>,
maxTimeMS: <number>,
upsert: <boolean>,
returnNewDocument: <boolean>,
collation: <document>
}
)
2. 查找一个文档并更新
db.student.findOneAndUpdate({"name":"lihaijie","age":38},{$set:{"age":50}});
3. 删除文档
1. db.collection.remove()
1. 语法
db.collection.remove( <query>, <justOne> #justOne默认为false,如果为true或1,查询到多个文档只删除一个文档
)
2. 删除全部记录(默认)
db.student.remove()
3. 删除单个文档
db.student.remove({"name":"lihaijie"},{justOne:true});
2. db.collection.deleteOne()
1. 语法
db.collection.deleteOne(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
2. 删除单个文档
db.student.deleteOne({"name" : "lihaijie", "age" : 35});
3. db.collection.deleteMany()
1. 语法
db.collection.deleteMany(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
2. 删除查出的所有文档
db.student.deleteMany({"name" : "lihaijie"});
4. 更新文档
1. db.collection.save()
2. db.collection.update()
1. 语法
db.collection.update(
查询条件,
整个文档或者修改器,
upsert: boolean,
multi: boolean 或者 multi 文档,
writeConcern :异常信息等级
)
参数说明:
查询条件是让我们定位到需要修改的文档
第二个参数是整个文档或修改器
upsert默认是false,不写入
multi默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来的多条记录全部更新
writeConcern的级别参数:
writeConcern.NONE:没有异常抛出
writeConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常
WriteConcem.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操
作。
WriteConcem.MAJORITY:抛出网络错误异常、服务器错误异常;并等待一个主服
务器完成写操作。
WriteConcem.FSYNC SAFE:抛出网络错误异常、服务器错误异常;写操作等待服
务器将数据刷新到磁盘。
WriteConcem.JOURNAL SAFE:抛 出网络错误异常 、服务器错误异常;写操作等待
服务器提交到磁盘的日志文件。
WriteConcem.REPLICAS SAFE:抛出网络错误异常、服务器错误异常;等待至少 2
台服务器完成写操作。
2. 更新一条记录
db.student.update({"name":"lihaijie"},{$set:{"age":20}});
3. 更新多条记录
db.student.update({"name":"lihaijie"},{$set:{"age":35}},{multi:true});
3. db.collection.updateOne() 更新单条文档
1. 语法
db.collection.updateOne(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string>
}
)
2. 更新一条记录
db.student.updateOne({"name":"lihaijie"},{$set:{"age":40}});
4. db.collection.updateMany() 更新多条文档
1. 语法
db.collection.updateMany(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string> // Available starting in MongoDB 4.2.1
}
)
2. 更新多条记录
db.student.updateMany({"name":"lihaijie"},{$set:{"age":100}});
5. bulk批量操作
6. 游标
游标是一种容器,可以用来存放find执行结果。而放入游标中的数据无论是单条还是包括多条数据结果集,每次都只能提取一条数据
游标一般用于遍历数据集。通过hasNext()判断是否有下一条数据,next()获取下一条数据
例子:
var cursor=db.student.find();
zhenpin:PRIMARY> while(cursor.hasNext()) { var temp=cursor.next() print(temp.name); }
2022-08-17T13:50:29.555+0800 E QUERY [js] SyntaxError: missing ; before statement @(shell):1:49
zhenpin:PRIMARY> db
yangjianbo
zhenpin:PRIMARY> while(cursor.hasNext()) {
... var temp=cursor.next()
... print(temp.name);
... }
liudehua
akun
zhangxueyou
zhangxueyou

浙公网安备 33010602011771号