MongoDB

2018-09-26  本文已影响0人  妮妮爱布
1、MongoDB概念解析:
SQL和MongoDB概念区别
2、数据库:

"show dbs"命令可以显示所有数据的列表。
"db"命令可以显示当前数据库对象或集合。
"use"命令,可以连接到一个指定的数据库。

3、集合:
db.createCollection("mycoll", {capped:true, size:100000})  
4、元数据:
元数据
5、MongoDB数据类型:
数据类型
  • ObjectId


    ObjectId
6、创建数据库:
use DATABASE_NAME

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

  db.runoob.insert({"name":"菜鸟教程"})

集合只有在内容插入后才会创建
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

7、删除数据库:
db.dropDatabase()#默认删除test

db.collection.drop()#删除集合
8、创建集合:
db.createCollection(name, options)
9、删除集合:
db.collection.drop()

#例子
db.mycol2.drop()
10、插入文档:
db.COLLECTION_NAME.insert(document)

#例子
>db.mycol.insert({title: 'MongoDB教程', 
          description: 'MongoDB是一个Nosql数据库',
          by: '菜鸟教程',
          url: 'http://www.runoob.com',
          tags: ['MongoDB', 'database', 'NoSQL'],
          likes: 100
})
11、更新文档:
10、删除文档:
  db.collection.remove(
     <query>,
     {
       justOne: <boolean>,
       writeConcern: <document>
     }
  )
    query :(可选)删除的文档的条件。
    justOne : (可选)如果设为 true 或 1,则只删除一个文档。
    writeConcern :(可选)抛出异常的级别。
11、查询文档:
  db.collection.find(query, projection)
    query :可选,使用查询操作符指定查询条件
    projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
12、条件操作符:
13、$type操作符:
MongoDB中的类型
#获取集合中title为字符串的数据
>db.collection.find({'title': {$type: 2}})
>db.collection.find({'title': {$type: 'string'}})
15、Limit与Skip方法:
16、排序Sort()方法:
# 通过使用1和-1来指定排序的方式
>db.COLLECTION_NAME.find().sort({KEY: 1})

#举例
>db.collection.find({}, {'title': 1,  _id: 0}).sort({'likes': -1})
{ "title" : "PHP 教程" }
{ "title" : "Java 教程" }
{ "title" : "MongoDB 教程" }
>
17、索引——createIndex()方法
>db.collection.createIndex(keys, options)
#key为需要创建索引字段,1 为指定按升序创建索引


举例
>db.collection.createIndex({'title': 1})
#使用多个字段创建索引(关系型数据库中称作复合索引)
>db.collection.createIndex({'title': 1, 'description': -1})
18、聚合——aggregate()方法
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
聚合表达式

1、$project实例

  >db.mycol.aggregate(
        {$project:{
              title: 1,
              author: 1,
        }});

2、$match实例

#$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
>db.mycol.aggregate([
                {$match: {score: {$gt: 70, $lte: 90}}} ,
                {$group: {_id: null, count: {$sum: 1}}}           
                ]);

3、skip实例

  >db.mycol.aggregate(
              {$skip: 5});
19、MongoDB关系:

1:1
1:N
N:1
N:N

20、数据库引用:

ref:集合名称id:引用的id
$db:数据库名称,可选参数

  { "_id":ObjectId("53402597d852426020000002"),
     "address": {
           "$ref": "address_home",
           "$id": ObjectId("534009e4d852427820000002"),
           "$db": "runoob"
            },
     "contact": "987654321",
     "dob": "01-01-1991",
     "name": "Tom Benzamin"
  }


  #通过指定$ref参数(address_home集合)来查找集合中指定id的用户地址信息
  >var user = db.users.findOne({"name": "Tom Benzamin"})
  >var dbRef = user.address
  >db[dbRef.$ref].findOne({"_id": (dbRef.$id)})
  
  #返回结果
  {
     "_id" : ObjectId("534009e4d852427820000002"),
     "building" : "22 A, Indiana Apt",
     "pincode" : 123456,
     "city" : "Los Angeles",
     "state" : "California"
  }
21、查询分析:

indexOnly: 字段为 true ,表示我们使用了索引。

cursor:因为这个查询使用了索引,MongoDB 中索引存储在B树结构中,所以这是也使用了 BtreeCursor 类型的游标。如果没有使用索引,游标的类型是 BasicCursor。这个键还会给出你所使用的索引的名称,你通过这个名称可以查看当前数据库下的system.indexes集合(系统自动创建,由于存储索引信息,这个稍微会提到)来得到索引的详细信息。

n:当前查询返回的文档数量。

nscanned/nscannedObjects:表明当前这次查询一共扫描了集合中多少个文档,我们的目的是,让这个数值和返回文档的数量越接近越好。

millis:当前查询所需时间,毫秒数。

indexBounds:当前查询具体使用的索引。

22、原子操作:

原子操作常用命令:

举例

> t.find() 
{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] }

> t.update( {'comments.by':'joe'}, {$inc:{'comments.$.votes':1}}, false, true )

> t.find() 
{ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }
23、高级索引:
{
   "address": {
      "city": "Los Angeles",
      "state": "California",
      "pincode": "123"
   },
   "tags": [
      "music",
      "cricket",
      "blogs"
   ],
   "name": "Tom Benzamin"
}
24、ObjectId:
25、Map Reduce:

注:使用 MapReduce 要实现两个函数 Map 函数和 Reduce 函数,Map 函数调用 emit(key, value),遍历 collection 中所有的记录,将 key 与 value 传递给 Reduce 函数进行处理。

未完待续...

上一篇 下一篇

猜你喜欢

热点阅读