2.1 Diving into the MongoDB shell

mongodb的admin数据库账号密码:

  1. mongo admin -uadmin -p123456

2.1.1 Starting the shell

  1. mongo

2.1.2 Databases, collections, and documents

  • MongoDB存储信息在documents中
  • collections类似于表
  • databases只是一个namespaces来区分collections
  • 默认的database是test

image.png
databases和collections只有documents第一次被插入的时候才会创建

2.1.3 Inserts and queries

image.png
image.png
_id字段
可以认为该值为document’s 主键
image.png
image.png
pass a query predicate
image.png
传递一个query selector
image.png
传递多个字段在query predicate中

  1. db.users.find({
  2. _id: ObjectId("62a69c886f65c86c70e88dff"),
  3. username: "smith"
  4. })

image.png
这里隐式的使用了and在字段中

  1. db.users.find({ $and: [
  2. {_id: ObjectId("62a69c886f65c86c70e88dff")},
  3. {username: "smith"}
  4. ]})

image.png
显示使用and

  1. db.users.find({ $or: [
  2. {username: "smith"},
  3. {username: "jones"}
  4. ]
  5. })

image.png
使用or操作

2.1.4 updating documents

  1. db.users.update({username:"smith"}, {$set: {country: "Canada"}})

image.png

  1. db.users.find({username:"smith"})

image.png
Replacement update
另一种方式更新文档是替换它而不是设置它

  1. db.users.update({username:"smith"}, {country:"Canada"})
  2. db.users.find({country:"Canada"})

image.png
通过id可以看出,该语句是替换而不是添加

通过unset操作可以简单的移出一个字段

  1. db.users.update({country: "Canada"}, {$set: {username:"smith"}})
  2. db.users.find({country:"Canada"})
  3. db.users.update({username:"smith"}, {$unset: {country: 1}})
  4. db.users.find({username:"smith"})

image.png

Updating Complex Data

  1. db.users.update({username:"smith"}, {
  2. $set: {
  3. favorites: {
  4. cities: ["Chicago", "Cheyenne"],
  5. movies: ["Casablanca", "For a Few Dollars More", "The String"]
  6. }
  7. }
  8. })
  9. db.users.update({username: "jones"}, {
  10. $set: {
  11. favorites: {
  12. movies: ["Casablanca", "Rocky"]
  13. }
  14. }
  15. })
  1. db.users.find().pretty()

image.png
pretty是为了打印的时候更漂亮,但是不用shell的话可以不加这个

  1. db.users.find({"favorites.movies": "Casablanca"})

More Advanced Updates
相比于$set,你更应该使用$push or $addToSet
这些操作可以添加一个item到array
第二种是可以预防重复添加的

  1. db.users.update({"favorites.movies": "Casablanca"}, {
  2. $addToSet: {"favorites.movies": "The Maltease Falcon"}
  3. }, false, true)

第三个参数,是判断如果文档不存在,是否应该插入文档
第四个参数,是表明是否多次更新。也就是如果匹配到了多个文档,是否都进行更新

2.1.5 Deleting data

  1. db.users.remove({"favorites.cities": "Cheyenne"})

这个remove操作其实并没有完全删除collection;它只是从collection中删除了document
如果想要删除这个collection以及他的indexes,使用drop

  1. db.users.drop()

2.1.6 Other shell features

db.help()

2.2 Creating and querying with indexes

2.2.1 Creating a large collection

  1. for(i = 0; i < 20000; i++) {
  2. db.numbers.save({num: i});
  3. }
  4. db.numbers.count()

Range Query

  • $gt
  • $lt
    1. db.numbers.find({num: {"$gt":500}})
    也可以两者结合使用: ```shell db.numbers.find({num: {“$gt”:500, “$lt”:520}})
  1. - $gte
  2. - $lte
  3. - $ne
  4. <a name="Qoyik"></a>
  5. ## 2.2.2 Indexing and explain
  6. explain描述了查询的路径和允许开发者通过确定查询使用了哪些索引来诊断慢操作
  7. ```shell
  8. db.numbers.find({num: {"$gt": 200}}).explain("executionStats")

image.png
为该集合创建一个索引:

  1. db.numbers.createIndex({num:1})

image.png
在mongodb3中,createIndex方法代替了ensureIndex方法
{num:1}表示应该在numbers集合中的所有documents的num键上建立一个升序的索引
确认这个索引被创建,通过getIndexes

  1. db.numbers.getIndexes()

image.png
该collection有两个indexes,第一个是id,这个是自动构建的;第二个是你创建的 num,这些索引在这些字段中叫做_id和num_1

2.3 Basic administration

2.3.1 Getting database information

  1. show dbs

image.png

  1. show collections

image.png

2.3.2 How commands work