3.MongoDB 初级Shell语法操作

0. 进入Shell操作界面

# 进入第一篇我们部署的mongoDB单机版目录
cd /opt/mongodb/bin
./mongo localhost:27017

1. 数据库操作

1.1 查看数据库

show dbs;

1.2 创建数据库

use xswl;

请注意, 执行完这句话之后, 再执行 show dbs;
你会发现xswl其实并没有在列表里, 这是因为在 MongoDB 中, 集合只有在内容插入后才会创建! 就是说, 创建集合(数据表)后要再插入一个文档(记录), 集合才会真正创建.
所以你需要执行插入操作, 这时 --> show dbs; 就看得到了.

1.3 删除数据库

db.dropDatabase();

2. 集合操作

2.1 增加集合

集合相当于数据库表, 但是mongodb可以不使用语句创建, 可以直接'指定集合插入, 表自动创建.

# 无参数
db.createCollection("you collection Name");
# 有参数
db.createCollection("colName", options);

options具体可看: https://www.runoob.com/mongodb/mongodb-create-collection.html

2.2 删除集合

db.${collectionName}.drop();

2.3 查看集合

show tables;
# 或者
show collections;

3. 数据操作

3.1 插入数据

db.COLLECTION_NAME.insert(document);

db.col.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})

3.2 更新数据

# 基本语法: db.collection.update({query}, {$set:{key:value}});
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})

详细请看:https://www.runoob.com/mongodb/mongodb-update.html

3.3 删除数据

db.col.remove({query});

# 删除全部数据
dn.col.remove({});

3.4 查询数据

db.col.find({and}, {projection});

https://www.runoob.com/mongodb/mongodb-query.html

3.5 条件操作符

  • $gt --> greater than --> >
  • $gte --> gt equal --> >=
  • $lt -->less than --> <
  • $lte --> lt equal --> <=
  • $ne --> not equal --> !=
  • $eq --> equal --> =
# select * from col where likes > 100;
db.col.find({likes : {$gt : 100}})

3.6 limit & skip

# 通常用来做分页, 只会显示第二条. 跳过一条, 显示一条. 先skip再limit, 和顺序没有关系
db.col.find({},{"title":1,_id:0}).limit(1).skip(1)

补充说明skip和limit方法只适合小数据量分页, 如果是百万级效率就会非常低, 因为skip方法是一条条数据数过去的, 建议使用where_limit

在查看了一些资料之后, 发现所有的资料都是这样说的:

不要轻易使用skip来做查询, 否则数据量大了就会导致性能急剧下降, 这是因为skip是一条一条的数过来的, 多了自然就慢了.

这么说skip就要避免使用了, 那么如何避免呢? 首先来回顾SQL分页的后一种时间戳分页方案, 这种利用字段的有序性质, 利用查询来取数据的方式, 可以直接避免掉了大量的数数. 也就是说, 如果能附带上这样的条件那查询效率就会提高, 事实上是这样的么? 我们来验证一下:

这里我们假设查询第100001条数据, 这条数据的Amount值是:2399927, 我们来写两条语句分别如下:

b.test.sort({"amount":1}).skip(100000).limit(10) //183ms
db.test.find({amount:{$gt:2399927}}).sort({"amount":1}).limit(10) //53ms
结果已经附带到注释了, 很明显后者的性能是前者的三分之一, 差距是非常大的. 也印证了skip效率差的理论.

3.7 sort

# 1 为正序, -1 为倒序
db.COLLECTION_NAME.find().sort({KEY:1})

skip(), limilt(), sort()三个放在一起执行的时候, 执行的顺序是先 sort(), 然后是 skip(), 最后是显示的 limit().

猜你喜欢

转载自www.cnblogs.com/unclecc/p/11264815.html