mongodb学习(1)

1.基本概念

database:数据库
collection:数据库表/集合
document:数据记录行/文档
field:数据字段/域
index:索引
primary key:主键,MongoDB自动将_id作为主键

{
    "_id" : ObjectId("5ab370915e4288000fac32da"),
    "uid" : "943b7516-b416-4b81-9276-9b222fd2c61b",
    "record_id" : "112383",
    "type" : "sh4",
    "url" : "https://nzpc6oqy2.qnssl.com/2024966/FORM-bd4-be45-4173-abba-be8d92e3c01f/xsl_20180322_154237_041.jpg",
    "name" : "感染源控制措施(手术/清创/引流等处理方式、开始时间、结束时间)",
    "updatetime" : ISODate("2019-01-07T03:05:56.564Z"),
    "createtime" : ISODate("2018-03-22T09:00:01.992Z"),
    "status" : 2,
    "__v" : 0,
    "data" : {
        "is_error" : 0,
        "data" : [ 
            {
                "药品名称" : "瑞格列奈片"
            }
        ]
    },
    "reason" : ""
}

一个mongodb中可以建立多个数据库。

数据库:MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的可以容纳多个独立的数据库。
文档:是一组键值对。
文档中的键/值对是有序的。
文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
MongoDB区分类型和大小写。
MongoDB的文档不能有重复的键。
文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
集合:就是 MongoDB 文档组,存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

Mongodb数据类型
String:字符串
Integer:整型数组
Boolean:布尔值
Double:双精度浮点值
Array:用于将数组或列表或多个值存储为一个键。
Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。?
Timestamp:时间戳。记录文档修改或添加的具体时间。
Object:用于内嵌文档。
Null:用于创建空值。
Symbol:符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。???
Date:日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID:对象 ID。用于创建文档的 ID。???
Binary Data:二进制数据。用于存储二进制数据。
Code:代码类型。用于在文档中存储 JavaScript 代码。
Regular expression:正则表达式类型。用于存储正则表达式。

2. 数据库操作

  1. 创建数据库

use DATABASE_NAME

如果数据库不存在,则创建数据库,否则切换到指定数据库。

  1. 查看所有数据库:

show dbs

空数据库不会展示

  1. 删除数据库:

db.dropDatabase()

例子:

> use database1
switched to db database1
> show dbs
admin    0.000GB
local    0.000GB
runoob1  0.000GB
> db.database1.insert({"name":"小灰灰"})
WriteResult({ "nInserted" : 1 })
> show dbs
admin      0.000GB
database1  0.000GB
local      0.000GB
runoob1    0.000GB
> db.dropDatabase()
{ "dropped" : "database1", "ok" : 1 }
> show dbs
admin    0.000GB
local    0.000GB
runoob1  0.000GB
  1. 创建集合:
    在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。

db.createCollection(name, options)

  1. 查看已有集合:

show collections

  1. 删除集合:

db.collection.drop()

例子:

> use runoob1
switched to db runoob1

> db.createCollection("testcol")
{ "ok" : 1 }

> show collections
col
testcol

> db.testcol.drop()
true

> show collections
col

  1. 插入文档:

db.COLLECTION_NAME.insert(document)

  1. 更新文档:

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

query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。

save() 方法:
save() 方法通过传入的文档来替换已有文档。语法格式如下:

db.collection.save(
,
{
writeConcern:
}
)

参数说明:
document : 文档数据。
writeConcern :可选,抛出异常的级别。

  1. 删除文档:
    remove() 方法的基本语法格式如下所示:

db.collection.remove(
,

)

query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别。

例子:

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

> db.col.update({"title" : "MongoDB 教程"},{$set:{"by" : "tester"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.col.find()
{ "_id" : ObjectId("5c9866fecb5b25a63c3e2672"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "tester", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }

> db.col.save({"_id" : ObjectId("5c9866fecb5b25a63c3e2672"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库save后"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.col.find()

{ "_id" : ObjectId("5c9866fecb5b25a63c3e2672"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库save后" }

  1. MongoDB 查询数据的语法格式如下:

db.collection.find(query, projection)

query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

db.col.find().pretty()

pretty() 方法以格式化的方式来显示所有文档。

小于:

db.col.find({"likes":{$lt:50}}).pretty()

小于或等于:

db.col.find({"likes":{$lte:50}}).pretty()

大于:

db.col.find({"likes":{$gt:50}}).pretty()

大于或等于:

db.col.find({"likes":{$gte:50}}).pretty()

不等于:

db.col.find({"likes":{$ne:50}}).pretty()

AND:MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。

语法格式如下:

db.col.find({key1:value1, key2:value2}).pretty()

OR :使用了关键字 $or,语法格式如下:

db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()

例子:

> db.col.find({}).pretty()
{
    "_id" : ObjectId("5c9866fecb5b25a63c3e2672"),
    "title" : "MongoDB 教程",
    "description" : "MongoDB 是一个 Nosql 数据库save后"
}
{ "_id" : ObjectId("5c9874f8cb5b25a63c3e2674"), "title" : "MongoDB" }
{ "_id" : ObjectId("5c987602cb5b25a63c3e2675"), "title" : "Mongo" }
{
    "_id" : ObjectId("5c987658cb5b25a63c3e2676"),
    "title" : "MongoDB",
    "description" : "test"
}
{
    "_id" : ObjectId("5c9876a9cb5b25a63c3e2677"),
    "title" : "MongoDB",
    "description" : "test",
    "age" : 50
}
{
    "_id" : ObjectId("5c9876afcb5b25a63c3e2678"),
    "title" : "MongoDB",
    "description" : "test",
    "age" : 20
}
{
    "_id" : ObjectId("5c9876b4cb5b25a63c3e2679"),
    "title" : "MongoDB",
    "description" : "test",
    "age" : 80
}
{
    "_id" : ObjectId("5c9876b9cb5b25a63c3e267a"),
    "title" : "MongoDB",
    "description" : "test",
    "age" : 51
}
{
    "_id" : ObjectId("5c987798cb5b25a63c3e267b"),
    "title" : "MongoDB",
    "description" : "test",
    "age" : 51
}
> db.col.find({"title":"MongoDB","description":"test"})
{ "_id" : ObjectId("5c987658cb5b25a63c3e2676"), "title" : "MongoDB", "description" : "test" }
{ "_id" : ObjectId("5c9876a9cb5b25a63c3e2677"), "title" : "MongoDB", "description" : "test", "age" : 50 }
{ "_id" : ObjectId("5c9876afcb5b25a63c3e2678"), "title" : "MongoDB", "description" : "test", "age" : 20 }
{ "_id" : ObjectId("5c9876b4cb5b25a63c3e2679"), "title" : "MongoDB", "description" : "test", "age" : 80 }
{ "_id" : ObjectId("5c9876b9cb5b25a63c3e267a"), "title" : "MongoDB", "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c987798cb5b25a63c3e267b"), "title" : "MongoDB", "description" : "test", "age" : 51 }
> 
> db.col.find({$or:[{"title":"MongoDB"},{"title":"MongoDB 教程"}]})
{ "_id" : ObjectId("5c9866fecb5b25a63c3e2672"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库save后" }
{ "_id" : ObjectId("5c9874f8cb5b25a63c3e2674"), "title" : "MongoDB" }
{ "_id" : ObjectId("5c987658cb5b25a63c3e2676"), "title" : "MongoDB", "description" : "test" }
{ "_id" : ObjectId("5c9876a9cb5b25a63c3e2677"), "title" : "MongoDB", "description" : "test", "age" : 50 }
{ "_id" : ObjectId("5c9876afcb5b25a63c3e2678"), "title" : "MongoDB", "description" : "test", "age" : 20 }
{ "_id" : ObjectId("5c9876b4cb5b25a63c3e2679"), "title" : "MongoDB", "description" : "test", "age" : 80 }
{ "_id" : ObjectId("5c9876b9cb5b25a63c3e267a"), "title" : "MongoDB", "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c987798cb5b25a63c3e267b"), "title" : "MongoDB", "description" : "test", "age" : 51 }
> db.col.find({"age":{$gte:50}})
{ "_id" : ObjectId("5c9876a9cb5b25a63c3e2677"), "title" : "MongoDB", "description" : "test", "age" : 50 }
{ "_id" : ObjectId("5c9876b4cb5b25a63c3e2679"), "title" : "MongoDB", "description" : "test", "age" : 80 }
{ "_id" : ObjectId("5c9876b9cb5b25a63c3e267a"), "title" : "MongoDB", "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c987798cb5b25a63c3e267b"), "title" : "MongoDB", "description" : "test", "age" : 51 }
> db.col.find({"age":{$gt:50}})
{ "_id" : ObjectId("5c9876b4cb5b25a63c3e2679"), "title" : "MongoDB", "description" : "test", "age" : 80 }
{ "_id" : ObjectId("5c9876b9cb5b25a63c3e267a"), "title" : "MongoDB", "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c987798cb5b25a63c3e267b"), "title" : "MongoDB", "description" : "test", "age" : 51 }
> db.col.find({"age":{$lt:50}})
{ "_id" : ObjectId("5c9876afcb5b25a63c3e2678"), "title" : "MongoDB", "description" : "test", "age" : 20 }
> db.col.find({"age":{$lte:50}})
{ "_id" : ObjectId("5c9876a9cb5b25a63c3e2677"), "title" : "MongoDB", "description" : "test", "age" : 50 }
{ "_id" : ObjectId("5c9876afcb5b25a63c3e2678"), "title" : "MongoDB", "description" : "test", "age" : 20 }
> db.col.find({"age":{$ne:50}})
{ "_id" : ObjectId("5c9866fecb5b25a63c3e2672"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库save后" }
{ "_id" : ObjectId("5c9874f8cb5b25a63c3e2674"), "title" : "MongoDB" }
{ "_id" : ObjectId("5c987602cb5b25a63c3e2675"), "title" : "Mongo" }
{ "_id" : ObjectId("5c987658cb5b25a63c3e2676"), "title" : "MongoDB", "description" : "test" }
{ "_id" : ObjectId("5c9876afcb5b25a63c3e2678"), "title" : "MongoDB", "description" : "test", "age" : 20 }
{ "_id" : ObjectId("5c9876b4cb5b25a63c3e2679"), "title" : "MongoDB", "description" : "test", "age" : 80 }
{ "_id" : ObjectId("5c9876b9cb5b25a63c3e267a"), "title" : "MongoDB", "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c987798cb5b25a63c3e267b"), "title" : "MongoDB", "description" : "test", "age" : 51 }

  1. $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
  2. limit()方法基本语法如下所示:

db.COLLECTION_NAME.find().limit(NUMBER)

  1. 我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
    skip() 方法脚本语法格式如下:

db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

> db.col.find({})
{ "_id" : ObjectId("5c9866fecb5b25a63c3e2672"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库save后" }
{ "_id" : ObjectId("5c9874f8cb5b25a63c3e2674"), "title" : "MongoDB" }
{ "_id" : ObjectId("5c987602cb5b25a63c3e2675"), "title" : "Mongo" }
{ "_id" : ObjectId("5c987658cb5b25a63c3e2676"), "title" : "MongoDB", "description" : "test" }
{ "_id" : ObjectId("5c9876a9cb5b25a63c3e2677"), "title" : "MongoDB", "description" : "test", "age" : 50 }
{ "_id" : ObjectId("5c9876afcb5b25a63c3e2678"), "title" : "MongoDB", "description" : "test", "age" : 20 }
{ "_id" : ObjectId("5c9876b4cb5b25a63c3e2679"), "title" : "MongoDB", "description" : "test", "age" : 80 }
{ "_id" : ObjectId("5c9876b9cb5b25a63c3e267a"), "title" : "MongoDB", "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c987798cb5b25a63c3e267b"), "title" : "MongoDB", "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c987f4fcb5b25a63c3e267c"), "title" : 12345, "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c988085cb5b25a63c3e267d"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 }
> db.col.find({"title" : {$type : 1}})
{ "_id" : ObjectId("5c987f4fcb5b25a63c3e267c"), "title" : 12345, "description" : "test", "age" : 51 }
> db.col.find({}).limit(3)
{ "_id" : ObjectId("5c9866fecb5b25a63c3e2672"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库save后" }
{ "_id" : ObjectId("5c9874f8cb5b25a63c3e2674"), "title" : "MongoDB" }
{ "_id" : ObjectId("5c987602cb5b25a63c3e2675"), "title" : "Mongo" }
> db.col.find({}).skip(7)
{ "_id" : ObjectId("5c9876b9cb5b25a63c3e267a"), "title" : "MongoDB", "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c987798cb5b25a63c3e267b"), "title" : "MongoDB", "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c987f4fcb5b25a63c3e267c"), "title" : 12345, "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c988085cb5b25a63c3e267d"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 }
> 
  1. MongoDB sort() 方法
    在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
> db.col.find({},{"age":1,_id:0}).sort({"likes":1})
{  }
{  }
{  }
{  }
{ "age" : 50 }
{ "age" : 20 }
{ "age" : 80 }
{ "age" : 51 }
{ "age" : 51 }
{ "age" : 51 }
{  }
>
  1. MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
> db.col.find({})
{ "_id" : ObjectId("5c9866fecb5b25a63c3e2672"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库save后" }
{ "_id" : ObjectId("5c9874f8cb5b25a63c3e2674"), "title" : "MongoDB" }
{ "_id" : ObjectId("5c987602cb5b25a63c3e2675"), "title" : "Mongo" }
{ "_id" : ObjectId("5c987658cb5b25a63c3e2676"), "title" : "MongoDB", "description" : "test" }
{ "_id" : ObjectId("5c9876a9cb5b25a63c3e2677"), "title" : "MongoDB", "description" : "test", "age" : 50 }
{ "_id" : ObjectId("5c9876afcb5b25a63c3e2678"), "title" : "MongoDB", "description" : "test", "age" : 20 }
{ "_id" : ObjectId("5c9876b4cb5b25a63c3e2679"), "title" : "MongoDB", "description" : "test", "age" : 80 }
{ "_id" : ObjectId("5c9876b9cb5b25a63c3e267a"), "title" : "MongoDB", "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c987798cb5b25a63c3e267b"), "title" : "MongoDB", "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c987f4fcb5b25a63c3e267c"), "title" : 12345, "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c988085cb5b25a63c3e267d"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 }
> db.col.aggregate([{$group:{_id:"$age",num:{$sum:1}}}])
{ "_id" : 51, "num" : 3 }
{ "_id" : 80, "num" : 1 }
{ "_id" : 20, "num" : 1 }
{ "_id" : 50, "num" : 1 }
{ "_id" : null, "num" : 5 }

> db.col.aggregate([{$match:{age:{$gt:50}}},{$group:{_id:"$age",num:{$sum:1}}}])
{ "_id" : 51, "num" : 3 }
{ "_id" : 80, "num" : 1 }
> db.col.aggregate([{$match:{age:{$gt:50}}}])
{ "_id" : ObjectId("5c9876b4cb5b25a63c3e2679"), "title" : "MongoDB", "description" : "test", "age" : 80 }
{ "_id" : ObjectId("5c9876b9cb5b25a63c3e267a"), "title" : "MongoDB", "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c987798cb5b25a63c3e267b"), "title" : "MongoDB", "description" : "test", "age" : 51 }
{ "_id" : ObjectId("5c987f4fcb5b25a63c3e267c"), "title" : 12345, "description" : "test", "age" : 51 }

db.getCollection()

返回一个集合对象。需要传递一个在数据库中存在的一个有效的集合名称

学习链接:
http://www.runoob.com/mongodb

你可能感兴趣的:(mongodb学习(1))