系统学习MongoDB(三)document详解

提要:本章强化document概念及基础CURD

文档 document

MongoDB以BSON文档的形式存储数据记录,BSON是JSON的二进制表现形式,但是BSON支持的数据类型要多于JSON。

文档结构:

{
    field1: value1,
    field2: value2,
    field3: value3,
    ...
    fieldN: valueN
}

文档以 field-value对的形式组成,value可以是任何BSON支持的数据类型。可以是对象也可以是数组或者包含对象的数组,这种在Mongo中成为嵌入文档。如下

 {
     _id: ObjectId("5099803df3f4948bd2f98391"),
     name: { first: "Alan", last: "Turing" },
     birth: ISODate("2018-05-11T05:58:51.122Z"),
     death: ISODate("2022-05-11T05:58:51.122Z"),
     contribs: [ "Turing machine", "Turing test", "Turingery" ],
     views : 1250000
}

字段名限制

  • 字段名都是string类型
  • _id 是保留的主键的关键字,它的value必须是全局唯一的。_id字段如果有子字段,字段名不能以$开头。
  • 字段名不能包含null字符
  • 服务器允许字段中包含.$ (MongoDB 5.0开始支持)

文档限制

  • 一条文档最大不可超过16M
  • Bson文档中的字段是有序的。查询的时候,如条件{a: 1, b: 1} =={a: 1, b: 1} 但是 {a: 1, b: 1} != {b: 1, a: 1},这可能导致查询引擎查询时重排序。

CURD操作

创建文档:

//单条插入语法   
db.collection.insertOne(
   , //文档Bson
   { //可选参数
      writeConcern: 
   }
)
//示例  商品products 集合中插入一条文档
db.products.insertOne(
  { item: "card", qty: 15 }
);
//返回结果
{
   "acknowledged" : true,
   "insertedId" : ObjectId("56fc40f9d735c28df206d078")  //插入文档未指定_id是系统自己生成唯一id并返回,建议使用系统生成的id
}
//多条插入语法
db.collection.insertMany(
   [  , , ... ], //此参数为要插入的文档数组
   { //可选参数
      writeConcern: ,
      ordered: 
   }
)
//示例
db.products.insertMany( [
      { item: "card", qty: 15 },
      { item: "envelope", qty: 20 },
      { item: "stamps" , qty: 30 }
   ] );
//返回结果
{
   "acknowledged" : true,
   "insertedIds" : [
      ObjectId("562a94d381cb9f1cd6eb0e1a"),
      ObjectId("562a94d381cb9f1cd6eb0e1b"),
      ObjectId("562a94d381cb9f1cd6eb0e1c")
   ]
}

查询文档

//查询文档
db.collection.find(query, projection) // query 参数为查询条件  projection 可选参数,为指定返回结果包括哪些字段
//示例 查询商品集合中 item 是card的记录
db.products.find( { item: "card", } )
//返回结果
 { 
    item: "card", 
      qty: 15
 }

note:下章节详细讲解各种查询的写法和操作符的使用。

修改文档

//语法
db.collection.updateOne(
   , //查询条件,写法与查询中的条件一直
   , //要修改得字段
  { //可选参数
     upsert: ,
     writeConcern: ,
     collation: ,
      arrayFilters: [ , ... ],
       hint:  
   }
//示例 将item是crad 的qty字段改为3 $set为操作符
db.products.updateOne(
      { "item" : "card" },
      { $set: { "qty" : 3 } }
   );

删除文档

//语法
db.collection.deleteOne(
   , //删除指定条件的文档
   {//可选参数
      writeConcern: ,
      collation: ,
      hint:         // Available starting in MongoDB 4.4
   }
)
//示例 删除指定id的数据
 db.products.deleteOne( { "_id" : ObjectId("562a94d381cb9f1cd6eb0e1a") } );

接下来的章节会详细讲解各种情况的查询和修改使用案例,力求最全。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章