Nosql数据库之mongodb基本操作(01)

Posted 橙子山川

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nosql数据库之mongodb基本操作(01)相关的知识,希望对你有一定的参考价值。

Nosql数据库之mongodb基本操作(01)

mongodb是一个基于分布式文件存储的数据库。和传统的结构性强的关系型数据库相比,mongodb的特点是以对象的方式作为存储单元(即文档),以BSON格式存储(json的二进制)。由于和结构性强、需要定义数据类型的传统关系数据库相比,mongodb基本单元以对象形式存储,因此扩展性强。

比如db.collectionName.insert(obj)。其中的collectionName是集合名称,obj是文档。

 Obj = {
    Name:”bnbookshop”,
    Age:”20”,
    Pay:”200万”
}

这是存储了一个bn书店的数据库基本单元。如果我要增加该书店的营业额呢?可以在Obj的基础上添加即可。
db.collection.update( criteria, objNew)
criteria是update的查询条件
objNew是更新的对象。

数据库操作之插入
db.collectionname.insert()

数据库操作之创建集合  
db.createCollection("集合名称")

数据库操作之删除指定集合  
db."集合名称".drop()

数据库操作之更新文档  
db."集合名称".update()

数据库操作之删除指定文档
db."集合名称".remove("文档对象名称")

简单查询

find({},{属性名称:1}) :注意如果是1,那么只是返回这个属性和对应值,不会返回完整对象

如果返回1:

> db.yangpuqu.find()
{ "_id" : ObjectId("5a6159cae47909c55224c507"), "daxue" : "上海理工大学" }
{ "_id" : ObjectId("5a615a06e47909c55224c508"), "购物中心" : "五角场", "沃尔玛" : "商场" }
{ "_id" : ObjectId("5a615a81e47909c55224c509"), "复旦大学" : "一所大学", "交通大学" : "重点大学" }
> db.yangpuqu.find({},{"复旦大学":1})
{ "_id" : ObjectId("5a6159cae47909c55224c507") }
{ "_id" : ObjectId("5a615a06e47909c55224c508") }
{ "_id" : ObjectId("5a615a81e47909c55224c509"), "复旦大学" : "一所大学" }
> db.yangpuqu.find({},{"交通大学":1})
{ "_id" : ObjectId("5a6159cae47909c55224c507") }
{ "_id" : ObjectId("5a615a06e47909c55224c508") }
{ "_id" : ObjectId("5a615a81e47909c55224c509"), "交通大学" : "重点大学" }
>

如果返回0:
一样的,把对应对象的属性去掉,但这个对象会打印出来。

> db.yangpuqu.find({},{"交通大学":0}))
{ "_id" : ObjectId("5a6159cae47909c55224c507"), "daxue" : "上海理工大学" }
{ "_id" : ObjectId("5a615a06e47909c55224c508"), "购物中心" : "五角场", "沃尔玛" : "商场" }
{ "_id" : ObjectId("5a615a81e47909c55224c509"), "复旦大学" : "一所大学" }

【总结】不管是返回0还是返回1,都是单独设置的,不会影响整体的对象输出;

比较查询

  • $lt, less than  <

  • $lte,less than and equal <=

  • $gt,greater than  >

  • $gte,greater than and equal >=

  • $ne,not equal  !=

选择大于15的景点

> db.jingdian.find({"著名景点":{$gt:15}})
{ "_id" : ObjectId("5a6169d3e47909c55224c51a"), "著名景点" : 16, "地理位置" : "北京市区" }
{ "_id" : ObjectId("5a6169d3e47909c55224c51b"), "著名景点" : 17, "地理位置" : "北京市区" }
{ "_id" : ObjectId("5a6169d3e47909c55224c51c"), "著名景点" : 18, "地理位置" : "北京市区" }
{ "_id" : ObjectId("5a6169d3e47909c55224c51d"), "著名景点" : 19, "地理位置" : "北京市区" }

逻辑与 操作:

如果属性相同, 可以简写:

 db.jingdian.find({"著名景点":{$lte:12,$gt:8}})
{ "_id" : ObjectId("5a6169d3e47909c55224c513"), "著名景点" : 9, "地理位置" : "北京市区" }
{ "_id" : ObjectId("5a6169d3e47909c55224c514"), "著名景点" : 10, "地理位置" : "北京市区" }
{ "_id" : ObjectId("5a6169d3e47909c55224c515"), "著名景点" : 11, "地理位置" : "北京市区" }
{ "_id" : ObjectId("5a6169d3e47909c55224c516"), "著名景点" : 12, "地理位置" : "北京市区" }

如果属性不同 ,用$and

例如:总数据:

db.shipin.find()
{ "_id" : ObjectId("5a616ca6e47909c55224c51e"), "北京烤鸭价格" : 200, "景点" : 100, "季节" : "夏季" }
{ "_id" : ObjectId("5a616cb0e47909c55224c51f"), "北京烤鸭价格" : 200, "景点" : 300, "季节" : "夏季" }
{ "_id" : ObjectId("5a616cb5e47909c55224c520"), "北京烤鸭价格" : 200, "景点" : 500, "季节" : "夏季" }
{ "_id" : ObjectId("5a616cc0e47909c55224c521"), "北京烤鸭价格" : 200, "景点" : 500, "季节" : "冬季" }
{ "_id" : ObjectId("5a616cc6e47909c55224c522"), "北京烤鸭价格" : 100, "景点" : 500, "季节" : "冬季" }
{ "_id" : ObjectId("5a616cd2e47909c55224c523"), "北京烤鸭价格" : 40, "景点" : 90, "季节" : "冬季" }
{ "_id" : ObjectId("5a616cd8e47909c55224c524"), "北京烤鸭价格" : 40, "景点" : 90, "季节" : "秋季" }
{ "_id" : ObjectId("5a616ce4e47909c55224c525"), "北京烤鸭价格" : 40, "景点" : 290, "季节" : "春季" }

$and的使用:逻辑与
查询北京烤鸭价格在100-200之间,季节是夏季的条件

> db.shipin.find({$and:[{"北京烤鸭价格":{$gte:100,$lte:500}},{"季节":"夏季"}]})
{ "_id" : ObjectId("5a616ca6e47909c55224c51e"), "北京烤鸭价格" : 200, "景点" : 100, "季节" : "夏季" }
{ "_id" : ObjectId("5a616cb0e47909c55224c51f"), "北京烤鸭价格" : 200, "景点" : 300, "季节" : "夏季" }
{ "_id" : ObjectId("5a616cb5e47909c55224c520"), "北京烤鸭价格" : 200, "景点" : 500, "季节" : "夏季" }

$or的使用:逻辑或操作
查询北京烤鸭价格要么价格大于100,要么景点票价小于100

> db.shipin.find({$or:[{"北京烤鸭价格":{$gt:100}},{"景点":{$lte:100}}]})
{ "_id" : ObjectId("5a616ca6e47909c55224c51e"), "北京烤鸭价格" : 200, "景点" : 100, "季节" : "夏季" }
{ "_id" : ObjectId("5a616cb0e47909c55224c51f"), "北京烤鸭价格" : 200, "景点" : 300, "季节" : "夏季" }
{ "_id" : ObjectId("5a616cb5e47909c55224c520"), "北京烤鸭价格" : 200, "景点" : 500, "季节" : "夏季" }
{ "_id" : ObjectId("5a616cc0e47909c55224c521"), "北京烤鸭价格" : 200, "景点" : 500, "季节" : "冬季" }
{ "_id" : ObjectId("5a616cd2e47909c55224c523"), "北京烤鸭价格" : 40, "景点" : 90, "季节" : "冬季" }
{ "_id" : ObjectId("5a616cd8e47909c55224c524"), "北京烤鸭价格" : 40, "景点" : 90, "季节" : "秋季" }

查询景点价格:要么90,要么100

方法1:

> db.shipin.find({$or:[{"景点":90},{"景点":100}]})
{ "_id" : ObjectId("5a616ca6e47909c55224c51e"), "北京烤鸭价格" : 200, "景点" : 100, "季节" : "夏季" }
{ "_id" : ObjectId("5a616cd2e47909c55224c523"), "北京烤鸭价格" : 40, "景点" : 90, "季节" : "冬季" }
{ "_id" : ObjectId("5a616cd8e47909c55224c524"), "北京烤鸭价格" : 40, "景点" : 90, "季节" : "秋季" }

方法2:$in 操作

db.集合名称({属性:{$in:[条件1,条件2...]}})

 db.shipin.find({"景点":{$in:[90,100]}})
{ "_id" : ObjectId("5a616ca6e47909c55224c51e"), "北京烤鸭价格" : 200, "景点" : 100, "季节" : "夏季" }
{ "_id" : ObjectId("5a616cd2e47909c55224c523"), "北京烤鸭价格" : 40, "景点" : 90, "季节" : "冬季" }
{ "_id" : ObjectId("5a616cd8e47909c55224c524"), "北京烤鸭价格" : 40, "景点" : 90, "季节" : "秋季" }

查询景点价格:不能小于295

方法1:

> db.shipin.find({"景点":{$gte:290}})
{ "_id" : ObjectId("5a616cb0e47909c55224c51f"), "北京烤鸭价格" : 200, "景点" : 300, "季节" : "夏季" }
{ "_id" : ObjectId("5a616cb5e47909c55224c520"), "北京烤鸭价格" : 200, "景点" : 500, "季节" : "夏季" }
{ "_id" : ObjectId("5a616cc0e47909c55224c521"), "北京烤鸭价格" : 200, "景点" : 500, "季节" : "冬季" }
{ "_id" : ObjectId("5a616cc6e47909c55224c522"), "北京烤鸭价格" : 100, "景点" : 500, "季节" : "冬季" }
{ "_id" : ObjectId("5a616ce4e47909c55224c525"), "北京烤鸭价格" : 40, "景点" : 290, "季节" : "春季" }

方法2: 用$not实现

find({属性名:{$not:{条件1}}})
db.shipin.find({"景点":{$not:{$lt:290}}})
{ "_id" : ObjectId("5a616cb0e47909c55224c51f"), "北京烤鸭价格" : 200, "景点" : 300, "季节" : "夏季" }
{ "_id" : ObjectId("5a616cb5e47909c55224c520"), "北京烤鸭价格" : 200, "景点" : 500, "季节" : "夏季" }
{ "_id" : ObjectId("5a616cc0e47909c55224c521"), "北京烤鸭价格" : 200, "景点" : 500, "季节" : "冬季" }
{ "_id" : ObjectId("5a616cc6e47909c55224c522"), "北京烤鸭价格" : 100, "景点" : 500, "季节" : "冬季" }
{ "_id" : ObjectId("5a616ce4e47909c55224c525"), "北京烤鸭价格" : 40, "景点" : 290, "季节" : "春季" }

查询景点价格:不能小于295 ,不能大于400

用数组的方式发现,报错:报错信息如下:

Error: error: {
       "waitedMS" : NumberLong(0),
       "ok" : 0,
       "errmsg" : "$not needs a regex or a document",
       "code" : 2
}

数组查询

  • $all

  • key.index

  • $size

  • $slice

查询发达城市中:
1 查询既包括广州有包括汕头的城市 $all
2 查询第二个城市是东莞的数组 key.index
3 查询只有两个城市的数组 $size
4 查询有广州的城市,但只取前三个结果 $slice

这个练习留给读者吧(自定义数据结构..)!


介绍:每日一小步,愿与你同行~



以上是关于Nosql数据库之mongodb基本操作(01)的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB之NoSQL

MongoDB之NoSQL

NoSQL之mongodb

NOSQL《一》之MongoDB的理解

NoSQL之mongodb我见

NOSQL《二》之MongoDB的加强