Mongodb官方文档学习(初级篇)

  • 特性

    • 一种文档数据库(BSON documents)
    • 高性能、丰富的查询语言、高可用、横向扩展、支持多存储引擎
  • Shell(js接口)

    • Date:
      • Date(),返回当前时间的String
      • new Date(),返回Date,通过ISODate()的包装器
      • ISODate(),ISODate("2012-12-19T06:01:17.171Z")
    • 检查类型:mydoc._id instanceof ObjectId
    • show dbs,use <db>,show users
    • gt、gte(大于等于)、lt、lte
  • CRUD操作

    • 插入
      • collection 不存在会自动创建
      • 插入无_id字段时会自动创建
      • db.collection.insertOne() :db. users. insertOne({name: "sue",age: 26,status: "pending"}
      • db.collection.insertMany() :
    • 查找:db.collection.find()
      • db.inventory.find( { status: "D" } )
      • 嵌入文档查询条件:db.inventory.find( { "size.uom": "in" } )
      • 数组
        • db.inventory.find( { tags: ["red", "blank"] } ),包含
        • db.inventory.find( { tags: { $all: ["red", "blank"] } } ),都包含且没有其他的元素
      • 返回值:db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } ),等同于SELECT item, status from inventory WHERE status = "A"
      • sort、skip、limit、comunt
    db.inventory.find( { status: { $in: [ "A", "D" ] } } )
    db.inventory.find( {
     status: "A",
     $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
    } )
    db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
    
    • 更新
      • db.collection.updateOne()
      • db.collection.updateMany()
      • db.collection.replaceOne()
      • 其他能起到更新效果的方法:
        • db.collection.findOneAndReplace().
        • db.collection.findOneAndUpdate().
        • db.collection.findAndModify().
        • db.collection.save().
        • db.collection.bulkWrite().
    • 删除
      • db.collection.deleteOne()
      • db.collection.deleteMany()
      • 其他方法:
        • db.collection.findOneAndDelete().
        • db.collection.findAndModify().
        • db.collection.bulkWrite().
    db.inventory.insertMany([
    { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom:     "cm" } },
    { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
    { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85,     uom: "cm" } }
    ])
    
    SQL Terms/Concepts MongoDB Terms/Concepts
    database database
    table collection
    row document or BSON document
    column field
    index index
    table joins $lookup, embedded documents
    primary key(Specify any unique column or column combination as primary key.) primary key (In MongoDB, the primary key is automatically set to the _id field.)
    aggregation (e.g. group by) aggregation pipeline
    transactions transactions
    • 文本搜索

      • 文本索引:db.stores.createIndex( { name: "text", description: "text" } )
      • 搜索:db.stores.find( { text: {search: "java coffee shop" } } )
      • 聚合管道的文本搜索
      db.articles.aggregate(
         [
           { $match: { $text: { $search: "cake" } } },
           { $group: { _id: null, views: { $sum: "$views" } } }
         ]
      )
      
    • 地理位置(GEO)

      • GeoJSON Point
      location: {
            type: "Point",
            coordinates: [-73.856077, 40.848447]
      }
      
  • 聚合(Aggregation,这个可以点进去看一下)
    • 管道聚合(Aggregation Pipeline)

      • db.aggregate( [ { <stage> }, ... ] )
      • Operator Expressions
        • Arithmetic Expression Operators:abs,add,ln,mod,$power……
        • Array Expression Operators:in,range,$size……
        • Boolean Expression Operators:and,not,$or
        • Comparison Expression Operators:cmp,eq(equal),gt,gte,lt,lte,$ne(not equal)
        • Conditional Expression Operators
        • Date Expression Operators
      • 比较
      SQL Terms, Functions, and Concepts MongoDB Aggregation Operators
      WHERE $match
      GROUP BY $group
      HAVING $match
      SELECT $project
      ORDER BY $sort
      LIMIT $limit
      SUM() $sum
      COUNT() sum,sortByCount
      join $lookup
      • 示例
        
        {//orders
          cust_id: "abc123",
          ord_date: ISODate("2012-11-02T17:04:11.102Z"),
          status: 'A',
          price: 50,
          items: [ { sku: "xxx", qty: 25, price: 1 },
                   { sku: "yyy", qty: 25, price: 1 } ]
        }
        SELECT COUNT(*) AS count FROM orders
        db.orders.aggregate( [
           {
             $group: {
                _id: null,
                count: { $sum: 1 }
             }
           }
        ] )
        
        SELECT cust_id,
        SUM(price) as total
        FROM orders
        WHERE status = 'A'
        GROUP BY cust_id
        db.orders.aggregate( [
         { $match: { status: 'A' } },
         {
         $group: {
          _id: "$cust_id",
         total: { $sum: "$price" }
         }
         },
         { $match: { total: { $gt: 250 } } }
        ] )
  • map-reduce
    //案例:计算每个单位订单中数量的平均值(Calculate Order and Total Quantity with Average Quantity Per Item)
    {// collection orders
     _id: ObjectId("50a8240b927d5d8b5891743c"),
     cust_id: "abc123",
     ord_date: new Date("Oct 04, 2012"),
     status: 'A',
     price: 25,
     items: [ { sku: "mmm", qty: 5, price: 2.5 },
              { sku: "nnn", qty: 5, price: 2.5 } ]
    }
    //提交(key,value),对每个items数组提取sku作为key,qty作为value数组的一个字段,count初始化为1
    var mapFunction2 = function() {
                       for (var idx = 0; idx < this.items.length; idx++) {
                           var key = this.items[idx].sku;
                           var value = {
                                         count: 1,
                                         qty: this.items[idx].qty
                                       };
                           emit(key, value);
                       }
                    };
    // 对每个key,合并value               
    var reduceFunction2 = function(keySKU, countObjVals) {
                     reducedVal = { count: 0, qty: 0 };

                     for (var idx = 0; idx < countObjVals.length; idx++) {
                         reducedVal.count += countObjVals[idx].count;
                         reducedVal.qty += countObjVals[idx].qty;
                     }

                     return reducedVal;
                  };
    // 对每个key,计算订单中数量的平均值              
    var finalizeFunction2 = function (key, reducedVal) {

                       reducedVal.avg = reducedVal.qty/reducedVal.count;

                       return reducedVal;

                    };
    // query 条件                
    db.orders.mapReduce( mapFunction2,
                     reduceFunction2,
                     {
                       out: { merge: "map_reduce_example" },
                       query: { ord_date:
                                  { $gt: new Date('01/01/2012') }
                              },
                       finalize: finalizeFunction2
                     }
                   )                
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358