《MongoDB实战》—— Javascript Shell操作MongoDB(二)

show dbs;   显示所有数据库。

use test;   若原来存在test数据库,则切换到test,若不存在,就创建test数据库。

show collections;  显示当前数据库的所有文档。

创建文档时若没有指定_id字段,就默认创建一个_id即ObjectId,_id是唯一的,可以插入自己的_id。

db.users.count();  显示users文档数量。

查询中指定多个字段,会隐式创建AND语句。也可以显示指定 $and 操作符。注:MongoDB一切基于文档操作,需要{}括起来键值对。

类似的,有 $or 操作符。

扫描二维码关注公众号,回复: 4699299 查看本文章

更新文档

更新操作符:$set  和 db.users.update()方法。(注:往后将省略db.users,表述为update方法)

第一个参数为文档信息,第二个参数为将修改的字段信息。

替换文档

只用update方法但不使用操作符$set则会替换原文档。

注:若确定是新增或修改某个文档的字段,则务必加上$set,否则会替换整个文档!

pretty()方法美化输出。严格来说,find()命令文档返回一个cursor光标,pretty()实际上就是 cursor.pretty()。

点操作符搜索键的内部键来查询。(注:单个键可以不用引号,但键中键必须加引号,否则报错,因此建议都加上引号)

可以看到,若用数组形式表示,则必须精确匹配文档;若不用数组形式,则表示查询数组中包含某个值的文档。

高级更新

若想在数组(列表)中添加一个值,不要用$set操作符,因为这要重新编写并发送整个数组。向列表添加元素,最好使用

$push 或者 $addToSet。后者是唯一的,防止数据重复。

可以看到,$addToSet 操作符添加列表中有的数据时,返回结果"nModified"值为0

删除数据

注:一定要在remove方法中传递参数,否则无参数的remove方法将删除集合中的所有文档!但不会删除集合,类似SQL中的delete命令。若向要删除集合及附带的索引数据,用drop方法,db.users.drop()

shell其他特性

help

db.help()

终端命令行  mongo --help

使用索引创建和查询

创建大集合,索引只有在集合包含许多文档的时候才有意义。下面创建20000个文档:

it 命令告诉 shell 返回下一个结果集。最开始 it 命令返回no cursor,当使用find()方法后再 it 就返回下面的结果集(默认一次返回20个),说明 find() 方法会创建一个游标且自动迭代游标。

$gt  $lt  $gte  $ lte  $ne  分别指大于、小于、大于等于、小于等于、不等于。

explain()方法,调试和优化查询。它描述了查询路径并通过确定查询使用的索引来诊断慢查询语句。

db.numbers.find({num: {"$gt": 500, "$lt": 505}}).explain()    不加参数

db.numbers.find({num: {"$gt": 500, "$lt": 505}}).explain("executionStats")  请求不同的模式并输出详细信息。

返回结果中:"totalDocsExamined" : 20000,表示查询引擎扫描了整个集合(即20000个文档),而"nReturned" : 4,表示只返回了4个结果!可以看到,扫描文档数量和低效查询数量差距很大(20000 VS 4)!"totalKeysExamined" : 0,表示整个扫描的索引数量为0。"executionTimeMillis" : 17,表示查询消耗17毫秒。

给集合创建索引,createIndex()方法

{num: 1} 表示为集合中的所有文档的num键创建 升序 索引。

getIndexes()方法来检验索引是否创建成功

  • key是指index key的定义,包括两部分:key 和值(排序的方向,1为升序);
  • name是index name;
  • ns是namespace;
  • v 标识index 版本,如果索引中包含"v":1,说明index是以新格式存储的,性能较高。

_id索引时集合自动创建,有两个索引,名字分别较_id_和num_1,这是没有设置索引名而MongoDB自动创建的名字。

再次执行 db.numbers.find({num: {"$gt": 500, "$lt": 505}}).explain("executionStats"),结果为:"nReturned":4, "executionTimeMillis" : 3, "totalKeysExamined" : 4, "totalDocsExamined" : 4,更快!

基本管理

show dbs;  show collections;

db.stats();

也可以在单个集合上执行 stats() 方法, db.users.stats()

命令如何执行

MongoDB的所有数据库命令都有共同点,即它们在一个叫 $cmd 的虚拟集合上实现查询。

stats() 方法包装了 shell 命令的方法调用,即 db.stats() 也是使用 {dbstats: 1} 定义的。

db.runCommand({collstats: "users"})  输出结果也同db.users.stats()。

db.runCommand  无括号调用将返回内部机制(其函数定义),理解底层的机制。

help() 方法返回一个方法列表,如 db.users.help() 

两次 tab 键能输出所有匹配的方法。

db.users.find  无括号的调用方法将返回此方法的实现代码。

猜你喜欢

转载自blog.csdn.net/weixin_42414461/article/details/85286933