MongoDB非关系型数据库
Intro
- Document 文档 – row / record
{"site":"www.runoob.com", "name":"菜鸟教程"}
文档是一组键值(key-value)对
- collection 集合 – table
对集合可以插入不同格式和类型的数据,包含多个document
基础
DB
创建或者连接到一个数据库
在MongoDB的shell里:
use DATABASE_NAME
删除当前数据库
db.dropDatabase()
collection
创建collection
db.createCollection(name, options)
插入document到collection
db.name.insert({"key": "value"})
删除集合
db.collection.drop()
document
使用 insert() 或 save() 方法向集合中插入文档
db.COLLECTION_NAME.insert(document)
insert(): 若插入的数据主键已经存在,
则会抛 org.springframework.dao.DuplicateKeyException 异常,
提示主键重复,不保存当前数据。
或
db.COLLECTION_NAME.save(document)
查找
db.collection_name.find(query, projection)
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值,只需省略该参数即可(默认省略)。
where by = ‘菜鸟教程’
db.col.find({"by":"菜鸟教程"}).pretty()
where likes < 50
db.col.find({"likes":{$lt:50}}).pretty()
find匹配多个键值
db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"}).pretty()
find使用AND OR
'where likes>50 AND (by = ‘菜鸟教程’ OR title = ‘MongoDB 教程’
db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}] }).pretty()
可以把整个document数据赋给一个变量,直接用变量进行操作
document=({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
});
db.collection_name.insert(document)
操作符
(>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果
获取 “col” 集合中 title 为 String 的数据:
db.col.find({"title" : {$type : 2}})
或
db.col.find({"title" : {$type : 'string'}})
limit, skip
limit
db.COLLECTION_NAME.find().limit(NUMBER)
NUMBER:从MongoDB中读取的记录条数
skip
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
NUMBER:作为跳过的记录条数
排序
db.COLLECTION_NAME.find().sort({KEY:1})
1:升序
-1:降序
>db.col.find({}, {"title":1,_id:0}).sort({"likes":-1})
{ "title" : "PHP 教程" }
{ "title" : "Java 教程" }
{ "title" : "MongoDB 教程" }
聚合 aggregate
聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似 SQL 语句中的 count(*)。
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
计算每个作者所写的文章数
sql
select by_user, count(*) from mycol group by by_user
mongodb
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])