MongoDB(1):数据库和集合基本操作

MongoDB是一款非关系型数据库。传统的关系型数据库受到各种关系的累赘,各种数据形式的束缚难以处理海量数据以及超高并发的业务场景。
而MongoDB又是一个非关系数据库中功能最丰富、最像关系数据库的。

MongoDB

MongoDB支持的数据结构是非常松散的,是类似json的bson格式。

{
   title: 'MongoDB',
   body: 'MongoDB是非关系型数据库',
}

MongoDB中一个数据库保护多个集合,一个集合包含多个文档,类似于MySQL中一个表包含多条数据。
集合级表,文档为一条记录。

基本概念

show dbs #查看所有数据库的列表
db # 查看当前数据库对象或者集合
use db_name # 切换数据库

文档

一个文档就是一行数据,MongoDb中使用一种json的bson存储数据,bson数据可以理解为在json的基础上添加了一些json中没有的数据类型。

文档之间的逻辑关系

#user
{
    "name": "TOM",
    "age": "10"
}
#address
{
    "city":"BeiJing",
    "building": "22A"
}

# 嵌入关系,一个文档嵌入到另外一个文档中
# address嵌入到user中
{
    "name": "TOM",
    "age": "10",
    "address":{
        "city":"BeiJing",
        "building": "22A"
    }
}
# 引用关系,通过引用文档_id来建立关系
{
    "name": "TOM",
    "age": "10",
    "address_ids":[ObjectID("123456") ]
}

嵌入关系适用于一对一关系,引用式关系适用于一对多或多对多。

集合

即关系数据库中的表,可以包含多条结构不同的文档

{"user":"john", "age":"20"}
{"level": "Hard"}

缺点

同结构的数据要多次存储字段名,比如每条user文档都要存储字段名"name" 和 "age"

元数据

数据库的信息:DBNAME.system.*
DBNAME.system.namespaces :列出所有名字空间
DBNAME.system.indexs :列出所有索引
DBNAME.system.profile :列出数据库概要信息
DBNAME.system.users :列出访问数据库的用户
DBNAME.system.sources :列出服务器信息

数据库的创建和销毁

  1. 创建 use db_name
  2. 销毁 db.dropDatabase()

创建集合

db.createCollections("Collection_name")
show collections : 查看创建的集合
db.collecion_name.drop() : 删除集合

插入数据

  1. insert()
# 插入数据时,集合会自动创建
db.collection_name.insert([
    {name:"tom", age:"20"},
    {name:"john", age:"12"}
])
  1. save
# 插入数据时,集合会自动创建
db.collection_name.save([
    {name:"tom", age:"20"},
    {name:"john", age:"12"}
])

insert和save的区别

insert只能插入一条新的记录
save可以插入新的也可以更改某条记录
如果已经有了一条记录(以主键为准),insert 操作会报错,而使用 save 指令则会更新原记录。

查询

  1. find()
db.collections.find() # 不传递参数返回所有记录
db.collections.find().pretty()  # 让输出结构更美观
  1. and
# 输入多个键值对实现and
db.collections.find({key1:val1, key2:val2})
  1. OR
# 使用$or关键字
db.collections.find( { $or:[{key1:val1}, {key2:val2}]})
  1. 同时使用AND和OR
db.collections.find({"key1": "val1", 
    $or:{
    [
      {key2:val2},{key3:val3}
]
}
  1. 数字比较
    $gt,$eq,$gte,$lte

集合创建与删除

db.createCollection(name,options)

> db.createCollection("shiyanlou") #无参数
{ "ok" : 1 }
> show collections
shiyanlou
system.indexes
> db.createCollection("shiyanlou2", { capped : 1, autoIndexId : 1, size : 6142800, max : 10000 } ) #带参数
{ "ok ": 1 }
capped:类型为 Boolean,如果为 true 则创建一个固定大小的集合,当其条目达到最大时可以自动覆盖以前的条目。在设置其为 true 时也要指定参数大小;
autoIndexId:类型为 Boolean,默认为 false,如果设置为 true,则会在 _id 字段上自动创建索引,3.2后不再支持
size:如果 capped 为 true 则需要指定,指定参数的最大值,单位为 byte;
max:指定最大的文档数。
插入数据时先检查size再检查max

db.collection.drop()

更新

1.db.collection.update(, , {upsert:, multi:,writeConcern:})

db.collection.update({"id":2}, {"id":5}) # id为2的数据将被更新为{id:5},其它字段被抛弃
db.collection.update({"id":2}, {$set:{age:20}}) # 只把age字段更新为20其它字段不变,如果没有这个字段则添加这个字段
db.collection.update({"id":3},{$set:{age:30}}, {"upsert":true}) #如果不存在该条数据则新增一条
# multi多行更新,multi要和$set组合使用
db.collections.update({"age":{$gt:20}}, {$set:{"salary":200}},{"multi":true})

  1. db.collection.save({_id:ObjectId(),NEW_DATA}) # 替换已存在记录

删除

db.COLLECTION_NAME.remove(DELECTION_CRITERIA)

createCollection():创建集合
db.COLLECTION.drop():删除集合
db.COLLECTION_NAME.insert(document):插入文档
db.COLLECTION_NAME.update(SELECTION_CRITERIA,UPDATED_DATA):更新文档
db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA}):替换已存在的文档
db.COLLECTION_NAME.remove(DELECTION_CRITERIA):删除文档
posted @ 2022-09-29 22:21  店里最会撒谎白玉汤  阅读(140)  评论(0编辑  收藏  举报