《MongoDB高手课》学习记录(次日)

踩坑记录

操做系统 windows 10 家庭中文版 1909 正则表达式

  1. 安装 windows 版本的时候,有一个安装 MongoDB Compass 的选项,若是你选了,恭喜你,125M包,就本地这下载速度,能下个几个小时。
  2. windows 版本安装过程当中会自动新建服务,但,但,自动创建的 MongoDB 服务的 登陆身份 确实此帐户,结果服务说啥也起不来。果断忽略,而后将登陆身份改成 本地系统帐户 ,完美解决。

image.png
固然,若是是服务器,仍是得搞成 Network Service
image.pngmongodb

次日

计划

今天要学习《06 MongoDB基本操做》shell

Mongo的链接地址格式数据库

mongodb://username:password@host[:port]/database?<options>

基本操做

如下都在shell环境下windows

查看当前数据库

> db
mock

切换数据库

> use test

查看当前表

> show collections
> show tables

插入一条记录

> db.fruit.insertOne({name: "apple"})
{
        "acknowledged" : true,
        "insertedId" : ObjectId("5dfcae3eebbe93035d7c6b55")
}

插入多条记录

> db.fruit.insertMany([
... {name: "apple"},
... {name: "pear"},
... {name: "orage"}
... ])
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("5dfcb07debbe93035d7c6b56"),
                ObjectId("5dfcb07debbe93035d7c6b57"),
                ObjectId("5dfcb07debbe93035d7c6b58")
        ]
}

检索记录

至关于 select 返回的是游标数组

> db.fruit.find()
{ "_id" : ObjectId("5dfcae3eebbe93035d7c6b55"), "name" : "apple" }
{ "_id" : ObjectId("5dfcb07debbe93035d7c6b56"), "name" : "apple" }
{ "_id" : ObjectId("5dfcb07debbe93035d7c6b57"), "name" : "pear" }
{ "_id" : ObjectId("5dfcb07debbe93035d7c6b58"), "name" : "orage" }

单条件查询(一个条件)

> db.orders.find({"name":"Destinee Schneider"})
{
    "_id": ObjectId("5dbe7a545368f69de2b4d36e"),
    "street": "493 Hilll Curve",
    "city": "Champlinberg",
    "state": "Texas",
    "country": "Malaysia",
    "zip": "24344-1715",
    "phone": "425.956.7743 x4621",
    "name": "Destinee Schneider",
    "userId": 3573,
    "orderDate": ISODate("2019-03-26T03:20:08.805Z"),
    "status": "created",
    "shippingFee": NumberDecimal("8.00"),
    "orderLines": [{
        "product": "Refined Fresh Tuna",
        "sku": "2057",
        "qty": 25,
        "price": NumberDecimal("56.00"),
        "cost": NumberDecimal("46.48")
    }, {
        "product": "Refined Concrete Ball",
        "sku": "1738",
        "qty": 61,
        "price": NumberDecimal("47.00"),
        "cost": NumberDecimal("47")
    }, {
        "product": "Rustic Granite Towels",
        "sku": "500",
        "qty": 62,
        "price": NumberDecimal("74.00"),
        "cost": NumberDecimal("62.16")
    }, {
        "product": "Refined Rubber Salad",
        "sku": "1400",
        "qty": 73,
        "price": NumberDecimal("93.00"),
        "cost": NumberDecimal("87.42")
    }, {
        "product": "Intelligent Wooden Towels",
        "sku": "5674",
        "qty": 72,
        "price": NumberDecimal("84.00"),
        "cost": NumberDecimal("68.88")
    }, {
        "product": "Refined Steel Bacon",
        "sku": "5009",
        "qty": 8,
        "price": NumberDecimal("53.00"),
        "cost": NumberDecimal("50.35")
    }],
    "total": NumberDecimal("407")
}

多条件 and 查询(1)

> db.orders.find({"country":"Italy","city":"North Elliot"})
{
    "_id": ObjectId("5dbe7a5b50fc769de3e1a0f8"),
    "street": "5769 Von Trail",
    "city": "North Elliot",
    "state": "South Dakota",
    "country": "Italy",
    "zip": "93708-8445",
    "phone": "1-390-726-3544",
    "name": "Alexys Swift",
    "userId": 9628,
    "orderDate": ISODate("2019-07-25T07:21:14.661Z"),
    "status": "completed",
    "shippingFee": NumberDecimal("10.00"),
    "orderLines": [{
        "product": "Refined Plastic Computer",
        "sku": "5065",
        "qty": 50,
        "price": NumberDecimal("82.00"),
        "cost": NumberDecimal("71.34")
    }, {
        "product": "Generic Granite Gloves",
        "sku": "4352",
        "qty": 10,
        "price": NumberDecimal("37.00"),
        "cost": NumberDecimal("32.56")
    }, {
        "product": "Practical Rubber Chicken",
        "sku": "2035",
        "qty": 29,
        "price": NumberDecimal("84.00"),
        "cost": NumberDecimal("68.04")
    }, {
        "product": "Handcrafted Fresh Bike",
        "sku": "2276",
        "qty": 51,
        "price": NumberDecimal("77.00"),
        "cost": NumberDecimal("64.68")
    }, {
        "product": "Sleek Cotton Car",
        "sku": "5257",
        "qty": 6,
        "price": NumberDecimal("94.00"),
        "cost": NumberDecimal("79.9")
    }, {
        "product": "Practical Fresh Mouse",
        "sku": "9593",
        "qty": 67,
        "price": NumberDecimal("98.00"),
        "cost": NumberDecimal("96.04")
    }, {
        "product": "Incredible Plastic Ball",
        "sku": "7804",
        "qty": 22,
        "price": NumberDecimal("45.00"),
        "cost": NumberDecimal("39.15")
    }, {
        "product": "Refined Plastic Bike",
        "sku": "9804",
        "qty": 27,
        "price": NumberDecimal("22.00"),
        "cost": NumberDecimal("18.92")
    }, {
        "product": "Handcrafted Concrete Shoes",
        "sku": "1473",
        "qty": 1,
        "price": NumberDecimal("49.00"),
        "cost": NumberDecimal("44.1")
    }],
    "total": NumberDecimal("588")
}

多条件 and 查询(2)

> db.orders.find({$and: [{"country":"Italy"},{"city":"North Elliot"}]})

多条件 or 查询

> db.orders.find({$or:[{"country":"Italy"},{"city":"North Elliot"}]})

正则表达式查询

> db.orders.find({"country": /^I/})

查询条件

SQL MQL
a=1 {a: 1}
a<>1 {a: {$ne: 1}}
a>1 {a: {$gt: 1}}
a<1 {a: {$lt: 1}}
a>=1 {a: {$gte: 1}}
a<=1 {a: {$lte: 1}}
a=1 and b=1 {a:1,b:1} 或 {$and: [{a:1},{b:1}]}
a=1 or b=1 {$or:[{a:1},{b:1}]}
a=null {a: {$exists:false}}
a in (1,2,3) {a: {$in:[1,2,3]}}
a not in(1,2,3) {a: {$nin:[1,2,3]}}

搜索子文档

> db.fruit.insertOne({
    name: "apple",
    from:{
        country: "China",
        province: "Guangdon"
    }
})

要查询China服务器

> db.fruit.find({"from.country":"China"})
{ 
    "_id" : ObjectId("5dfcc154d432688fd475d7a4"), 
    "name" : "apple", 
    "from" : {
        "country" : "China", 
        "province" : "Guangdon"
    }
}

查询数组中的值

> db.fruit.insert([
    {
        "name":"Apple",
        "color":["red","green"]
    },
    {
        "name":"Mango",
        "color":["yellow","green"]
    }
])

方式1

> db.fruit.find({"color":"red"})
{ "_id" : ObjectId("5dfcc543f598f9f1c332185f"), "name" : "Apple", "color" : [ "red", "green" ] }

方式2

> db.fruit.find({$or: [{"color":"red"},{"color":"yellow"}]})
{ 
    "_id" : ObjectId("5dfcc2eed432688fd475d7a6"), 
    "name" : "Mango", 
    "color" : [
        "yellow", 
        "green"
    ]
},
{ 
    "_id" : ObjectId("5dfcc543f598f9f1c332185f"), 
    "name" : "Apple", 
    "color" : [
        "red", 
        "green"
    ]
}

查询数组中的对象

> db.movies.insertOne({
    "title": "Raiders of the Lost Ark",
    "filming_locations": [
        {
            "city": "Los Angeles",
            "state":"CA",
            "country": "USA"
        },
        {
            "city": "Rome",
            "state": "Lazio",
            "country": "Italy"
        },
        {
            "city": "Florence",
            "state": "SC",
            "country": "USA"
        }
    ]
})

一个条件

> db.movies.find({
    "filming_locations.city": "Rome"
})
{ 
    "_id" : ObjectId("5dfcc850d432688fd475d7a7"), 
    "title" : "Raiders of the Lost Ark", 
    "filming_locations" : [
        {
            "city" : "Los Angeles", 
            "state" : "CA", 
            "country" : "USA"
        }, 
        {
            "city" : "Rome", 
            "state" : "Lazio", 
            "country" : "Italy"
        }, 
        {
            "city" : "Florence", 
            "state" : "SC", 
            "country" : "USA"
        }
    ]
}

二个条件

这样是啥也查不到的app

> db.movies.find({
    "filming_locations.city": "Rome",
    "filming_locaionts.country": "Italy"
})

应该这么写ide

> db.movies.find({
    "filming_locations": {
        $elemMatch: {
            "city":"Rome",
            "country": "Italy"
        }
    }
})

{ 
    "_id" : ObjectId("5dfcc850d432688fd475d7a7"), 
    "title" : "Raiders of the Lost Ark", 
    "filming_locations" : [
        {
            "city" : "Los Angeles", 
            "state" : "CA", 
            "country" : "USA"
        }, 
        {
            "city" : "Rome", 
            "state" : "Lazio", 
            "country" : "Italy"
        }, 
        {
            "city" : "Florence", 
            "state" : "SC", 
            "country" : "USA"
        }
    ]
}

控制 find 返回的字段

  • 返回全部记录,但只要 title 字段,不要 _id 字段
> db.movies.find({},{"_id":0,"title":1})
{ 
    "title" : "Raiders of the Lost Ark"
}

对 find 返回的结果进行格式化

> db.movies.find().pretty()

要否则在SHELL下面是这样的学习

{ "_id" : ObjectId("5dfcc850d432688fd475d7a7"), "title" : "Raiders of the Lost Ark", "filming_locations" : [ { "city" : "Los Angeles", "state" : "CA", "country" : "USA" }, { "city" : "Rome", "state" : "Lazio", "country" : "Italy" }, { "city" : "Florence", "state" : "SC", "country" : "USA" } ] }

加完变这样了

{
    "_id" : ObjectId("5dfcc850d432688fd475d7a7"),
    "title" : "Raiders of the Lost Ark",
    "filming_locations" : [
        {
            "city" : "Los Angeles",
            "state" : "CA",
            "country" : "USA"
        },
        {
            "city" : "Rome",
            "state" : "Lazio",
            "country" : "Italy"
        },
        {
            "city" : "Florence",
            "state" : "SC",
            "country" : "USA"
        }
    ]
}

删除文档

删除指定 _id 的记录

> db.fruit.remove({"_id" : ObjectId("5dfcc543f598f9f1c3321860")})

删除指定条件的文档

> db.fruit.remove({"color":"red"})
WriteResult({ "nRemoved" : 2 })

删除全部

> db.movies.remove({})

不给参数会报错

> db.movies.remove()

更新文档

只做用于集合中存在的文档

更新值

将下面的 name 是 apple 的改为 Apple

{ 
    "_id" : ObjectId("5dfcc154d432688fd475d7a4"), 
    "name" : "apple", 
    "from" : {
        "country" : "China", 
        "province" : "Guangdon"
    }
}
{ 
    "_id" : ObjectId("5dfcc2eed432688fd475d7a5"), 
    "name" : "Apple", 
    "color" : [
        "read", 
        "green"
    ]
}
{ 
    "_id" : ObjectId("5dfcc2eed432688fd475d7a6"), 
    "name" : "Mango", 
    "color" : [
        "yellow", 
        "green"
    ]
}
> db.fruit.update({"name": "apple"}, {$set: {"name": "Apple"}})

加个字段

> db.fruit.updateOne({"name":"Mango"},{$set: {"from":"China"}})

更新条件

updateOne 与 updateMany

条件 做用
$push 添加一个对象到数组底部
$pushAll 添加多个对象到数组底部
$pop 从数组底部删除一个对象
$pull 若是知足指定条件,就从数组中删除对象
$pullAll 若是知足任意条件,就从数组中删除对象
$addToSet 若是不存在,就增长值到数组

删除集合 drop

删除了没办法恢复哈

> db.fruit.drop()

删除数据库 dropDatabase

> db.dropDatabase()

最后

今天内容有点多,就是过了一遍,十几分钟的课程,学了有2个多小时,接下来练习练习……

相关文章
相关标签/搜索