NoSLQ之MongoDB简单入门

MongoDB/NoSQL
368
0
0
2022-09-14

一、MongoDB介绍

MongoDB属于NoSLQ型数据库 。

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

二、数据库目录结构

在使用MongoDB前我们需要开启MongoDB service端口

mongodb://localhost:27017

然后我们就可以使用了

首先我们需要来了解一下MongoDB的目录结构:

Go

连接MongoDB服务后,在端口下我们可以看到有几个数据库(例如:admin、config、coolcar等),一个数据库下可以有一个或者多个collection(例如:coolcar下有一个account),而一个collection下面则是Documents,该文档下就是具体的一条或多条数据。

三、基本操作(CRUD)

这里以coolcar数据库中的account为例

1. 增加数据

当我们使用一下代码时,如果coolcar没有account时,MongoDB会为我们创建

即:db.collection.insert()

db.acconut.insert()      //增加数据,可以单条,或者多条
db.account.insertOne()   //增加一条数据
db.account.insertMany()  //增加多条数据

例:

db.account.insertMany([
  {
    _id: "01",  //如果_id不设,系统会自动设置
    open_id:"trip01",
    login_count: 3,
  },
  {
    _id: "02",
    open_id: "trip02",
    login_count:4,
  },
])

数据就已经写入了:

{ 
  "acknowledged": true, 
  "insertedIds": { 
    "0": "01", 
    "1": "02" 
  }
}

_id: “01”:

{ 
  "_id": "01", 
  "open_id": "trip01", 
  "login_count": 3
}

_id:”02”:

{ 
  "_id": "02", 
  "open_id": "trip02", 
  "login_count": 4
}
2. 查找数据
//查数据
db.account.find()
ab.account.findAndModify()

运行:db.account.find()

[ 
  { 
    "_id": "01", 
    "open_id": "trip01", 
    "login_count": 3 
  }, 
  { 
    "_id": "02", 
    "open_id": "trip02", 
    "login_count": 4 
  }
]

当然这里还可以根据条件find

//查找大于3的login_count
db.account.find({
  login_count:{$gt:3}
})

//and逻辑查找
db.account.find({
  login_count:{$gt:3},
  open_id:"trip500",
})
//根据字段查找
db.account.find({
  "profile.age":{$lte: 30}
})

db.account.getIndexes({
  "profile.age":1
})

//or逻辑查找
//$or:[{con1, con2} or {con3}]
db.account.find({
  $or:[
    {
      login_count:{$gt: 2},
      open_id: "trip05",
    },
    {
      login_count: 3,
    }
  ]
})

当然我们还可以使更新数据的方法来修改

//查找open_id,如果有则找到,没有则创建
function resolveOpenId(open_id){
  return db.account.update({
    open_id: open_id
  }, {
    $set:{
      open_id: open_id
    }
  }, {
    upsert: true
  })
}
3. 更新数据
db.account.update()
db.account.updateOne()
db.account.updateMany()

我们仍然以db.account.update()为例

db.account.update({
    _id:"01"   //先找到_id:"01"的数据
},{
    $set:{  //更新的内容
        open_id:"trip05",
        login_count:0,
    } 
})

然后我们就可以看到:

{ 
  "_id": "01", 
  "open_id": "trip05", 
  "login_count": 0
}

当然还有一个更新方式:

//更新数据
db.account.update({
  _id: "01"
},{
  $inc:{
    login_count: 100   //在原本login_count值的基础上加上100
  },
  $set:{
    open_id: "trip500"  
    }
  })

看一下结果:

{ 
  "_id": "01", 
  "open_id": "trip500", 
  "login_count": 100
}

当然,这里我们还可以增加其他信息:

//更新数据
db.account.update({
  _id: "02"
  },
  {
    $set:{
      profile:{
        name:"abc",
        age: 21,
        photo_url: "https://example.com/123",
  }
 }
})

结果:

{ 
  "_id": "02", 
  "open_id": "trip02", 
  "login_count": 4, 
  "profile": { 
    "name": "abc", 
    "age": 21, 
    "photo_url": "https://example.com/123" 
  }
}
4. 删除数据
db.account.deleteOne()
db.account.deleteMany()

这里以db.account.deleteOne()为例:

db.account.deleteOne({
  _id: "01"
})

看到这样的结果:

{ 
  "acknowledged": true, 
  "deletedCount": 1   //删除条数据
}

如果我们需要清空account中的数据可以使用:

db.account.drop()