美文网首页
命令CURD

命令CURD

作者: 北海北_6dc3 | 来源:发表于2020-05-21 17:19 被阅读0次

    命令概览

    新增

    注意写关注

    db.collection.insertOne(
       <document>,
       {
          writeConcern: <document>
       }
    )
    
    --- 例子
       db.products.insertOne(
           { "item": "envelopes", "qty": 100, type: "Self-Sealing" },
           { writeConcern: { w : "majority", wtimeout : 100 } }
       );
    
    查询
    • in查询
    db.inventory.find( { status: { $in: [ "A", "D" ] } } )
    SELECT * FROM inventory WHERE status in ("A", "D")
    

    尽管可以使用$or运算符表示此查询,但是 在同一字段上执行相等性检查时,请使用$in运算符而不是$or运算符。

    • And和比较运算
    db.inventory.find( { status: "A", qty: { $lt: 30 } } )
    SELECT * FROM inventory WHERE status = "A" AND qty < 30
    

    有关不同BSON类型值的比较,请参见指定的BSON比较顺序

    名称 描述
    $eq 匹配等于指定值的值。
    $gt 匹配大于指定值的值。
    $gte 匹配大于或等于指定值的值。
    $in 匹配数组中指定的任何值。
    $lt 匹配小于指定值的值。
    $lte 匹配小于或等于指定值的值。
    $ne 匹配所有不等于指定值的值。
    $nin 不匹配数组中指定的任何值。
    • or条件
    db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )
    SELECT * FROM inventory WHERE status = "A" OR qty < 30
    
    • 数组查找
      严格要求数组顺序和元素,有且仅有"red" 和"blank"
    db.inventory.find( { tags: ["red", "blank"] } )
    

    忽略顺序和其他元素

    db.inventory.find( { tags: { $all: ["red", "blank"] } } )
    

    包含一个元素

    db.inventory.find( { tags: "red" } )
    

    多条件匹配
    相当于or

    db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
    

    相当于and,使用$elemMatch运算符在数组的元素上指定多个条件

    db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )
    

    查询一个元素的数组索引位置
    下示例查询dim_cm数组中第二个元素大于25的所有文档:

    db.inventory.find( { "dim_cm.1": { $gt: 25 } } )
    

    查询由数组的长度数组,例如,以下选择数组tags具有3个元素的文档 。

    db.inventory.find( { "tags": { $size: 3 } } )
    

    查询嵌套在数组中的文档。需要完全匹配

    -- 案例数据
    db.inventory.insertMany( [
       { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
       { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
       { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
       { item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
       { item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
    ]);
    
    db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
    

    使用数组索引来查询一个字段中嵌入文档

    db.inventory.find( { 'instock.0.qty': { $lte: 20 } } )
    

    单个嵌套文档在嵌套字段上满足多个查询条件

    --下面的示例查询文档,其中instock数组具有至少一个嵌入式文档,该文档同时包含 qty等于5的字段和warehouse等于的字段A:
    b.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )
    
    -- 下面的示例查询文档,其中instock数组具有至少一个嵌入式文档,该嵌入式文档包含qty大于10和小于或等于的字段20:
    db.inventory.find( { "instock": { $elemMatch: { qty: { $gt: 10, $lte: 20 } } } } )
    
    • 返回特定字段内嵌文件
      The following example returns:
      1、The _id field (returned by default),
      2、The item field,
      3、The status field,
      4、The uom field in the size document.
      The uom field remains embedded in the size document.
    -- 案例数据
    db.inventory.insertMany( [
      { item: "journal", status: "A", size: { h: 14, w: 21, uom: "cm" }, instock: [ { warehouse: "A", qty: 5 } ] },
      { item: "notebook", status: "A",  size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "C", qty: 5 } ] },
      { item: "paper", status: "D", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "A", qty: 60 } ] },
      { item: "planner", status: "D", size: { h: 22.85, w: 30, uom: "cm" }, instock: [ { warehouse: "A", qty: 40 } ] },
      { item: "postcard", status: "A", size: { h: 10, w: 15.25, uom: "cm" }, instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
    ]);
    

    内嵌文件中抑制特定的字段

    -- 排除size中uom返回
    db.inventory.find(
       { status: "A" },
       { "size.uom": 0 }
    )
    

    数组中字段返回

    -- 返回instock数组中的qty字段
    db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )
    

    回数组中的项目特定数组元素
    以下示例使用$slice投影运算符返回instock数组中的最后一个元素:

    db.inventory.find( { status: "A" }, { item: 1, status: 1, instock: { $slice: -1 } } )
    
    • null查询
    db.inventory.insertMany([
       { _id: 1, item: null },
       { _id: 2 }
    ])
    
    -- 以上两个语句都匹配
    > db.inventory.find( { item: null } )
    { "_id" : 1, "item" : null }
    { "_id" : 2 }
    
    -- The query returns only the document where the item field has a value of null.
    > db.inventory.find( { item : { $type: 10 } } )
    { "_id" : 1, "item" : null }
    
    -- 检查字段是否存在
    > db.inventory.find( { item : { $exists: false } } )
    { "_id" : 2 }
    
    
    修改
    • 更新单个文档
      更新第一个item='paper'的文档
    • 使用$set操作员更新的值 size.uom字段"cm"和值status 字段"P"
    • 使用$currentDate运算符将lastModified字段的值更新为当前日期。如果 lastModified字段不存在, $currentDate将创建该字段。有关$currentDate详细信息,请参见 。
    client[:inventory].update_one({ item: 'paper'},
                                  { '$set' => { 'size.uom' => 'cm', 'status' => 'P' },
                                    '$currentDate' => { 'lastModified' => true } })
    
    • 更新多个文档
      更新qty小于50的所有文档
    client[:inventory].update_many({ qty: { '$lt' => 50 } },
                                  { '$set' => { 'size.uom' => 'in', 'status' => 'P' },
                                    '$currentDate' => { 'lastModified' => true } })
    
    • 替换文档
      要替换除_id 字段以外的文档的所有内容,请将一个全新的文档作为第二个参数传递给 replace_one()
      替换文档可以具有与原始文档不同的字段。在替换文档中,_id由于该_id字段是不可变的,因此可以省略该字段;但是,如果您包含该_id字段,则该 字段必须与当前值具有相同的值。
    client[:inventory].replace_one({ item: 'paper' },
                                   { item: 'paper',
                                     instock: [ { warehouse: 'A', qty: 60 },
                                                { warehouse: 'B', qty: 40 } ] })
    
    删除
    • 批量写入和重试
      分为有序和无序批量写入,使用第二个参数{ ordered : false } 控制,默认有序
    try {
       db.characters.bulkWrite(
          [
             { insertOne :
                {
                   "document" :
                   {
                      "_id" : 4, "char" : "Dithras", "class" : "barbarian", "lvl" : 4
                   }
                }
             },
             { insertOne :
                {
                   "document" :
                   {
                      "_id" : 5, "char" : "Taeln", "class" : "fighter", "lvl" : 3
                   }
                }
             },
             { updateOne :
                {
                   "filter" : { "char" : "Eldon" },
                   "update" : { $set : { "status" : "Critical Injury" } }
                }
             },
             { deleteOne :
                { "filter" : { "char" : "Brisbane"} }
             },
             { replaceOne :
                {
                   "filter" : { "char" : "Meldane" },
                   "replacement" : { "char" : "Tanys", "class" : "oracle", "lvl" : 4 }
                }
             }
          ]
       );
    }
    catch (e) {
       print(e);
    }
    

    SQL到MongoDB的映射图

    相关文章

      网友评论

          本文标题:命令CURD

          本文链接:https://www.haomeiwen.com/subject/fyicohtx.html