当前位置:   article > 正文

mongo 基础之 数据库和集合,视图 文档,bson ,mongo数据类型 简介(1)_mongdb有哪些集合类型

mongdb有哪些集合类型

创建数据库和集合的时机?

如果数据库不存在第一次向数据库里添加数据的时候会创建数据库,如果集合不存在,在第一次存储数据的时候就会创建集合,比如insertOne或者createIndex的时候。当然也可以显示的创建集合,这个时候你可以设置集合大小或者文档的校验规则(指定文档的字段和字段类型)。

 

一、DataBase 特性


 1 创建数据库,mongodb数据库无需手动创建,如果指定使用的数据库不存在,那么在你插入一条数据时,mongodb会自动创建数据库,collection也是如此,如:

  2 数据库名称限制:

 2.1 大小写敏感;
 2.2 特殊字符限制 : 当mongodb安装在Windows上时,数据库名称不能包含这些字符:/\. "$*<>:|?以及null字符,安装在Unix或Linux上时,不能包含/\. "$及null字符;

 2.3 长度限制,不能为空并且不超过64个字符。


二、Collection特性


1、collection是mongodb存储文档的数据集合,与关系型数据库中的表类似

2、无需自动创建,插入数据时候自动创建。

3、命名规则限制:

应以下划线或字母开头,不可以: 
○ 包含$ 
○ 空字符串 
○ 为null 
○ 以system.prefix开头

如果collection名称包含特殊的字符串,如下划线或以数字开头

//创建与使用特殊collection
 db.getCollection("包含特殊字符的集合名称")
//错误创建与使用
 db.colllection名称
示ä¾
长度限制,collection名称+数据库名称+点号(.)的长度不得超过120个字节

4、显示创建collection

mongodb提供了显示创建collection的方法,以便通过用户指定参数创建有限制的collection,方法:

db.createCollection(name,options);
db.createCollection(<name>, { capped: <boolean>,
                              autoIndexId: <boolean>,
                              size: <number>,
                              max: <number>,
                              storageEngine: <document>,
                              validator: <document>,
                              validationLevel: <string>,
                              validationAction: <string>,
                              indexOptionDefaults: <document>,
                              viewOn: <string>,
                              pipeline: <pipeline>,
                              collation: <document> } )

options如下:

参数    值类型    解释
capped    Boolean    可选,为true时,必须指定collection的属性size的大小
autoIndexId    Boolean    可选,为false时,表示不会自动为_id创建索引,
3.2版本后不推荐使用,3.4版本后已移除。
注意:复制集不允许该属性为false
size    number    可选,指定capped为true的collection的最大字节数;
一旦collection达到指定最大字节数,mongodb会将旧文档移除,以腾出空间存放新文档;
该属性只对capped为true的collection起效
max    number    可选,指定collection最大文档数,
当collection达到最大文档数时,mongodb会自动删除最早存入的文档,腾出空间保存新文档;
size属性的优先级比该属性高,即如果collection达到了size,但未达到max,
mongodb依然会删除旧文档,腾出空间保存新文档
storageEngine    document    可选,只适用于WiredTiger存储引擎,这里不作解释,具体可参考官方文档
validator    document    验证器,可选,指定在更新或插入文档时验证文档的规则或表达式,3.2及其以后可用。

注意:
1、只会在更新或插入时验证,已存在但未做更新操作的文档不会进行验证;
2、不能为admin、local、config数据库中collection添加验证器;
3、不能为system.*中的collection添加验证器.
validationLevel    string    验证级别,可选,在更新期间,指定MongoDB如何严格地将验证规则应用到现有文档中,3.2及以后版本可用;
1、“off”,不启用验证;
2、“strict”,默认级别,应用于所有的更新与插入,
3、“moderate”,应用于执行插入的有效文档或更新操作的已有有效文档,不应用于执行更新操作的已有无效文档
validationAction    string    可选,指定对于验证不通过的文档是否以error方式处理,还是以warn方式警告但依然允许插入。
1、“error”,默认,插入或更新失败,不允许插入或更新;
2、“warn”,允许插入或更新,同时生成验证失败的日志记录,
3、validationLevel先于validationAction执行。
indexOptionDefaults    document    可选,允许用户在创建集合时为索引指定一个默认的配置。
3.2及以后版本可用
viewOn    string    源collection或view的名称,但不是完整的名称,不包含数据库名称,
完整名称如:dbname.collectionname,
3.4及以后版本可用
pipeline    array    聚合管道,与聚合查询有关,具体在以后学习聚合查询时会回来解释
collation    document    为collection指定一个针对不同语言的排序规则,3.4及以后版本可用。

collation: {
locale: <string>,
caseLevel:<boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate:<string>,
maxVariable: <string>,
backwards: <boolean>};
“locale”为必须项,其他为可选项,具体看collation文档;
1、如果没有明确为索引指定collation,默认使用collection的collation;

2、collation只能在创建collection时指定,一旦指定,无法修改。
 

二 :Capped Collections

特性: 

1 apped collections 就是固定大小的collection。如果空间都被使用完毕,新添加的对象会取代最旧的那个数据
2 高性能

3 自动的维护对象的插入顺序(过期按照插入的顺序).。它非常适合类似记录日志的功能。

4 必须手动创建(显示创建)

5 如果你执行find(),并没有指定顺序。返回的结果就是按照插入顺序排序

6 倒序使用 find().sort({$natural:-1})。

创建:

> db.createCollection("mycoll", {capped:true, size:100000})

size 单位是字节,数据存储空间值提前分配的,并且包含了数据库的头信息。在32bit机器中,capped collection最大存储为1e9个字节

 

使用和约束:


1 在capped collection中,你能添加新的对象,能进行更新,然而,对象不会增加存储空间。如果增加,更新就会失败 。
2 数据库不允许进行删除。只能使用drop()方法删除collection所有的行。注意: 删除之后,你必须显式的重新创建这个collection。
 

应用
1 可以来存储日志文档。
插入一个没有索引的capped collection速度非常接近存储在文件系统。
 额外的由于使用了内置的LRU机制,也不用担心超出硬盘空间。
2 缓存Caching. 如果你希望在数据库缓存一些小数量的对象。
capped collection提供了非常方便的机制来实现这个操作。
注意的是要给capped table添加索引,因为这种应用,读频率高于写。
3 自动存档Auto Archiving. 如果你希望数据自动过期
capped collection要比手写cron scripts更为方便。

 

建议:


1 为了最大化性能,不要再capped collection上创建索引。如果这个collection写操作多于读操作,更不需要索引了。
注意的是,你可能创建了索引。速度就会降低,但是还是要比标准的collection要快。

2 使用 natural ordering  来更有效的获取最近插入的元素。和linux的tail命令相似。

3 限制对象的数量, 指定 max参数。注意: 当指定了对象的数量,你也必须要限制存储大小。要确定的是存储大小要完全能够存储限制的对象数,不然的话,移除对象速度会加快。你可以使用validate()工具来查看collection使用的存储空间,这样就可以预估需要的空间。注意: 只限制存储大小性能要更好一些。

db.createCollection("mycoll", {capped:true, size:100000, max:100});
db.mycoll.validate();
提示: 当编程的时候,存储最近对象的版本号的方法就是把max参数设为1(max=1)。

4 预分配普通的collection
createCollection 命令也可以用于不是capped collections。

db.createCollection("mycoll", {size:10000000});
db.createCollection("mycoll", {size:10000000, autoIndexId:false});
 

collection大小,来预分配collection所需的硬盘空间。 

 autoIndexId 字段可以指定是否要在_id创建唯一索引。默认的情况下,

非capped collection要在_id上创建索引。

默认的情况下,capped collection不会在_id添加索引。

查看一个collection是否为capped collection
你可以调用isCapped方法来查看一个collection是否为capped collection。 db.foo.isCapped()

 

三 视图介绍

1、简介
    从3.4开始,mongodb支持从现有的collection或view视图创建只读的视图的功能,类似关系型数据库的视图。

2、视图创建
db.runCommand(
        {
            create:<view>,
            viewOn:<source>,
            pipeline:array,
            collation:document
        }
)

字段    解释
create    视图名称
viewOn    源collection或源视图,指定依赖哪个集合或视图而建的
pipeline    聚合管道,作为聚合管道片段的一部分,参与聚合操作
collation    为view指定一个针对不同语言的排序规则

å建è§å¾
2)、第二种创建方式,参数与以上

db.createView(<view>, <source>, <pipeline>, <collation>)>

å建è§å¾

3、视图特点
1)只读,不可进行写操作

2)视图索引与源collection一致

3)不能使用$natural操作符进行排序

4)使用映射(Projection)的限制:使用find()查询时不支持以下Projection操作(换句话说不支持返回数据部分结果的映射)

 1. $
 2. $elemMatch
 3. $slice
 4. $meta

5)视图名称不可改变

6)视图建立之后 列表内容视图在读操作期间是按需计算的,并且mongodb对视图的读操作会将其作为底层聚合管道的一部分;

视图不支持以下操作:
 - db.collection.mapReduce()
 - $text操作,即全文索引查询操作;该操作只会在聚合查询的第一部分有效
 - geoNear命令与$geoNear管道片段,(与地理位置索引的平面地理位置索引有关)

如果用于创建视图的聚合管道会抑制id字段,那么视图中的文档就没有id字段。
7)、分片视图,当视图的底层collection是分片集合时,视图就被认为是分片视图,于是在进行$lookup与$graphLookup操作时,from字段指定的视图不能为分片视图。

8)、视图与Collation

Collation:https://yq.aliyun.com/articles/71108
在创建视图时可以指定默认的Collation文档排序规则,如果不指定,视图会采用默认的普通二进制字符串排序规则,不会继承源collection的Collation排序规则。

测试:1、普通集合test 
æµè¯

æµè¯

2、指定Collation的集合test2 

æµè¯

3、基于test2的视图 

æµè¯
如果视图采用的是默认的Collation,那么无法覆盖或重写视图的Collation。

如果视图是依赖其他视图的建的,那么视图无法指定与源视图不同的Collation。 

æµè¯

多个视图做聚合查询时,这些视图的Collation必须是相同的。 


9)、公共视图定义

列表集合的操作,如db.getCollectionInfos()和db.getCollectionNames()等,都会列出其下视图。
视图的定义是公共的,也就是说 db.getCollectionInfos()与explain操作都会显示视图的定义,所以要避免对视图定义的字段与值的直接引用。


4、删除视图
db.collection.drop();
å é¤è§å¾


 

四 文档介绍

mongodb使用BSON格式存储数据记录.

 

文档结构

文档有键值对组成, 有以下结构:

{
    field1: value1,
    field2: value2,
    ...
    fieldN: valueN
}​

字段的值可以是任意BSON 数据类型,包括其他文档, 数组和文档数组.

例如,以下文档包含不同类型的值:

{
     _id: ObjectId("5099803df3f4948bd2f98391"),
    name: { first: "Alan", last: "Turing" },
    birth: new Date('Jun 23, 1912'),
    death: new Date('Jun 07, 1954'),
    contribs: [ "Turing machine", "Turing test", "Turingery" ],
    views : NumberLong(1250000)
}​

解析:

  • _id 是 ObjectId类型.
  • name 值是一个嵌入的文档,包含字段 first and last.
  • birth and death hold values of the Date type.
  • contribs holds an array of strings.
  • views holds a value of the NumberLong type.

Field Names

字段名是String类型

文档在字段名上有以下限制:

  • 字段名称 _id保留用作主键; 它的值在集合中必须是唯一的,是不可变的,并且可以是除数组以外的任何类型。
  • 不能以$ 开头
  • 不能包含 点(.) 字符
  • 不能包含空字符

有时候bson 文档可能有多个字段使用同一个名字.这种情况,参考:driver documentation .

Field Value 限制

对于索引集合,索引字段的值具有最大索引键长度限制。 有关详细信息, SeeMaximum Index Key Length 。

点符号

MongoDB使用点符号来访问数组的元素并访问嵌入文档的字段。

Arrays

要通过基于零的索引位置指定或访问数组的元素,请将数组名称与点(.)和从零开始的索引位置连接起来,并用引号引起来:

"<array>.<index>"​

{
    ...
    contribs: [ "Turing machine", "Turing test", "Turingery" ],
    ...
}​

要访问第三个字符:"contribs.2".

 

嵌入的文档

要使用点符号指定或访问嵌入式文档的字段,使用以下格式: 嵌入文档名称.字段名:

"<embedded document>.<field>"​

{
...
name: { first: "Alan", last: "Turing" },
contact: { phone: { type: "cell", number: "111-222-3333" } },
...
}

上边的 name, contact,以及嵌入在contact里边的phone都是嵌入式文档.

指定name字段中的last : "name.last".

在contact 中指定phone的号码: "contact.phone.number".

 

文档的局限性

Documents有以下属性:

Document Size Limit

bson文档的最大值是16M.

最大的文档大小有助于确保单个文档不能使用过多的RAM,或者在传输过程中使用过多的带宽。 为了存储大于最大大小的文档,MongoDB提供了GridFS API。 有关GridFS的更多信息,请参阅mongofiles和驱动程序的文档。

Document Field Order

除以下情况外,MongoDB保留写入操作之后的文档字段的顺序:

  • The _id 永远是文档的第一个字段
  • renaming 字段名可能会导致字段重排序.

The _id Field

在MongoDB中,存储在集合中的每个文档都需要一个唯一的_id字段作为主键。 如果插入的文档省略_id字段,则MongoDB驱动程序自动为_id字段生成一个ObjectId。

_id字段有以下行为和约束:

  • 默认情况下,MongoDB在创建集合时在_id字段上创建一个唯一的索引。
  • _id字段总是文档中的第一个字段。 如果服务器收到一个没有_id字段的文档,那么服务器将把字段移到开头。
  • _id字段可能包含任何BSON数据类型的值,除了数组。

_id值的常用选项:

  • 使用 ObjectId
  • 使用自然唯一标识符(如果可用)。 这节省了空间并避免了额外的索引。
  • 使用自增长的数字
  • 使用UUID

文档结构的其他用途

除了定义数据记录之外,MongoDB还一直使用文档结构,包括但不限于:query filtersupdate specifications documents, and index specification documents.

查询文档

查询过滤器指定纪录被选中的条件.

你可以使用<field>:<value> 表达式指定相等条件和查询运算符表达式。

{
    <field1>: <value1>,
    <field2>: { <operator>: <value> },
    ...
}​

举一个Query Documents的例子:

db.inventory.find( { status: "D" } )​

inventory 集合中找出status = "D"的记录. 与sql 中的语句一致:

       SELECT * FROM inventory WHERE status = "D"​

查询过滤器文档可以使用查询运算符来指定以下形式的条件:

{ <field1>: { <operator1>: <value1> }, ... }​

下边的例子展示从inventory  集合中检索 status等于"A"或"D"的记录.

db.inventory.find( { status: { $in: [ "A", "D" ] } } )​

这个语句与下边sql的语句一致:

        SELECT * FROM inventory WHERE status in ("A", "D")​

更新指定的文档

更新文档使用update operators 来指定在db.collection.update() 操作期间在指定字段上执行的数据修改。

{
<operator1>: { <field1>: <value1>, ... },
<operator2>: { <field2>: <value2>, ... },
...
}​

索引规范文档

索引规范文档定义字段索引和索引类型:

{ <field1>: <type1>, <field2>: <type2>, ... }​

 

五:BSON及mongoDB数据类型

JSON是一种被广泛使用的轻量级的数据交换格式,支持现今绝大多数主流的开发语言。而近几年崛起的mongDB则采用了类JSON的数据格式,在JSON之上进行了丰富和增强,使得mongoDB可以处理及报错更大的数据类型。本文就2者进行描述同时给出mongoDB支持的数据类型。

一、JSON特性
1、什么是JSON
        JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
        JSON采用完全独立于语言的文本格式,但也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。
        这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
        可以详细参考:http://www.json.org.cn/

2、JSON 数据的书写格式
        名称/值对 对象
        是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。
        每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
        如:  ({"firstName":"John"}),更多的格式见本文第而部分BSON支持的数据类型
        等价于这条 JavaScript 语句: firstName="John"

3、JSON仅支持以下数据类型
        数字(整数或浮点数)
        字符串(在双引号中)
        逻辑值(true 或 false)
        数组(在方括号中)
        对象(在花括号中)
        null

4、JSON基于两种结构:
        “名称/值”对的集合(A collection of name/value pairs),在不同的编程语言中有不同的描述
                    如:对象(object),纪录(record),结构(struct),字典(dictionary)
                    哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)
        值的有序列表。在大部分语言中,它被实现为数组(array),矢量(vector),列表(list),序列(sequence)

二、BSON特性
1、什么是BSON
        BSON()是一种类json的一种二进制形式的存储格式,简称Binary JSON
        它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。
        https://docs.mongodb.com/manual/reference/bson-types/

2、BSON的特性
    轻量性、可遍历性、高效性

3、mongoDB与BSON
        mongoDB对JSON串做了一些增加,使其可以支持更多的数据类型,并且将其作为存储结构
        mongoDB这种格式转化成一文档这个概念(Document),因为BSON是schema-free的,所以在MongoDB中所对应的文档也有这个特征
        mongoDB以BSON做为其存储结构的一种重要原因是其可遍历性

4 mongo  bson支持的数据类型

TypeNumberStringNotes
Double1"double"

db.gasprices.insert({x:5})

db.gasprices.insert({x:6.0})

入到库里都是double 类型的 5会变成 5.0

{ "x" : 5.0}

字符串2"string"

db.mycol.insert({x:”robin”}) 

入到库里

{"x:"robin""}

BSON字符串都是UTF-8编码

对象3"object"

db.mycol.insert({x:{}}) 

入到库里

 {"x" : {}}

数组4"array"

db.mycol.insert({x:[“a”,”b”,”c”]}) 

入到库里

 

二进制数据5"binData"

db.test1.insert({x:BinData(3, "OEJTfmD8twzaj/LPKLIVkA==")})

db.test1.insert({x:BinData(3,"c2FmZHNh")})

db.test1.insert({x:HexData(3,"736166647361")})

db.test1.insert({x:MD5("2078693f4c61ce3073b01be69ab76428")})

db.test1.insert({x:UUID("2078693f4c61ce3073b01be69ab76428")})

入到库里格式

{"x" : { "$binary" : "IHhpP0xhzjBzsBvmmrdkKA==", "$type" : "05" }}

未定义6"undefined"

db.mycol.insert({name:undefined}); 

入到库里

 {"x" : undefined}

ObjectId7"objectId"

db.mycol.insert({x:ObjectId()}) 

入到库里

{"x" : ObjectId("5dccc4bded98fde0e055e0f7")}

 

 

ObjectId 类似唯一主键,可以很快的去生存和排序,包含 12 bytes,含义是:

  • 前4个字节表示创建unix时间戳,格林尼治时间 UTC时间,比北京时间晚了8个小时
  • 接下来的3个字节是机器标识码
  • 紧接的两个字节由进程id组成(PID)
  • 最后三个字节是随机数

图片描述
MongoDB中存储的文档必须有一个_id键。这个键的值可以是任何类型的,默认是个ObjectId对象

由于ObjectId中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间:

  1. > var newObject = ObjectId()
  2. > newObject.getTimestamp()
  3. ISODate("2017-11-25T07:21:10Z")

ObjectId 转为字符串

  1. > newObject.str
  2. 5a1919e63df83ce79df8b38f

 

Boolean8"bool"

db.mycol.insert({x:true}) 

入到库里

{ "x" : true}

日期9"date"

db.mycol.insert({x:new Date()}) 

入到库里

{  "x" : ISODate("2019-11-14T03:00:05.792Z")}

 

表示当前距离Unix新纪元(1970年1月1日)的毫秒数.日期类型是有符号的,负数表示1970年之前的日期

> var mydate1 = new Date() //格林尼治时间
> mydate1
ISODate("2017-11-25T07:38:00.833Z")
> typeof mydate1
object

 

> var mydate2 = ISODate() //格林尼治时间
> mydate2
ISODate("2017-11-25T07:38:57.996Z")
> typeof mydate2
object

 

这样创建的时间是日期类型,可以使用JS中的Date类型的方法

返回一个时间类型的字符串

> var mydate1str = mydate1.toString()
> mydate1str
Sat Nov 25 2017 15:38:00 GMT+0800 (CST)
> typeof mydate1str
string

或者

> Date()
Sat Nov 25 2017 15:43:28 GMT+0800 (CST)

10"null"

db.mycol.insert({x:null}) 

入到库里就是

{ "x" : null}

正则表达式11"regex"

db.mycol.insert({x:/u01/i}) 

入到库里

{"x" : /u01/i}

DBPointer12"dbPointer"已过期
JavaScript(代码)13"javascript"

db.mycol.insert({x:function(){/This is a test code/}}) 

入到库里

{"x" : function (){/This is a test code/}}

符号14"symbol"已过期
JavaScript(带范围)15"javascriptWithScope"-----
32位整数16"int"

db.mycol.insert({x:NumberInt(“3”)}) 

入到库里

{ "x" : 3}

时间戳17"timestamp"

db.mycol.insert({x:new Timestamp()})

入到库里

{ "x" : Timestamp(1573701087, 1)}

 

BSON时间戳类型主要用于 MongoDB内部 使用 。在大多数情况下的应用开发中,你可以使用BSON日期类型

单个 mongod 实例中,时间戳值通常是唯一的

在复制集中, oplog 有一个 ts 字段。这个字段中的值使用BSON时间戳表示了操作时间

时间戳值是一个64位的值。其中:

  • 前32位是一个 time_t 值(与Unix新纪元相差的秒数)
  • 后32位是在某秒中操作的一个递增的序数
64位整数18"long"

db.mycol.insert({x:NumberLong(“3”)}) 
入到库里

{ "x" : NumberLong(3)}

Decimal12819"decimal"

db.mycol.insert({x:NumberDecimal(“3”)}) 

入到库里

{"x" : NumberDecimal("3")}

Min key-1"minKey"

db.gasprices.insert({x:MinKey})

db.gasprices.insert({x:MinKey()})

db.gasprices.insert({x:new MinKey()})

入到库里

{ "x" : { "$minKey" : 1 }}

Max key127"maxKey"和minkey类似

//查找undefined类型的文档

db.mycol.find({name:{$type:6}}) 
{ “_id” : ObjectId(“57ce1cc8c60f1fe489e49c68”), “name” : undefined }

db.mycol.find({name:{$type:"undefined"}}) 
{ “_id” : ObjectId(“57ce1cc8c60f1fe489e49c68”), “name” : undefined }

 

5 当对不同BSON类型数据进行比较时,Mongo使用如下比较顺序,从低到高:

1) MinKey (internal type) 
2) Null 
3) Numbers (ints, longs, doubles) 
4) Symbol, String 
5) Object 
6) Array 
7) BinData 
8) ObjectId 
9) Boolean 
10) Date 
11) Timestamp 
12) Regular Expression 
13) MaxKey (internal type)

数字类型:Mongo把一些类型作为比较目标。例如,数字类型的在比较前要进行转换。

String:默认情况下,Mongo使用简单二进制来比较字符串。

Collation:3.4版本新加,允许用户对字符串排序指定语言特定的规则,就像字母大小写,重点标记。 
Collation定义的语法如下:

  1. {
  2. locale: <string>,
  3. caseLevel: <boolean>,
  4. caseFirst: <string>,
  5. strength: <int>,
  6. numericOrdering: <boolean>,
  7. alternate: <string>,
  8. maxVariable: <string>,
  9. backwards: <boolean>
  10. }

当指定Collation时,locale域是必输项,其他的可选。

如果没有Collation指定在集合或者操作上,MongoDB对于字符串的比较跟以前版本一样,都是简单二进制对比。

Arrays:对于数组的比较,如果是小于或者升序比较,比较数组中的最小元素。如果是大于或者降序比较,比较数组中的最大元素。 空数组小于非空数组。

Dates and Timestaps:3.0.0版本之前两者同时排序,之后Date对象优先于Timestamp对象。

对于不存在或者值不存在域的比较,以空作处理。

BinData类型的排序步骤如下: 
(1)首先数据的长度或者尺寸。 
(2)然后通过BSON的一个字节的亚类型。 
(3)最后,通过这些数据,执行一个字节对字节的比较

 

6、关于_id与Object_Id
mongoDB中每一个文档都必须有一个"_id"键,该键等同于RDBMS中的主键,只不过这个主键是由mongoDB自动生成
"_id"键的值可以使用任意类型,可以不使用系统创建,而由用户自定义的规则生成
"_id"为轻量级,全局唯一,可类比为MySQL数据中的GTID,也用于解决不同机器副本集复制时唯一性问题

a 4-byte value representing the seconds since the Unix epoch,  //时间戳
a 3-byte machine identifier,                                   //机器唯一标识码
a 2-byte process id, and                                       //进程ID
a 3-byte counter, starting with a random value.                //随机数

db.mycol.findOne() 
{ “_id” : ObjectId(“57ce2d4cce8685a6fd9df3a3”), “x” : null } 
57ce2d4c //时间戳 ==>1473129804 ==> 2016/9/6 10:43:24 
ce8685 //机器唯一标识码 
a6fd //进程ID 
9df3a3 //随机数

7 常用的查询语句:

//返回结果变成数组格式
printjson(db.mycol.find().toArray()) 


“_id” : ObjectId(“57ce1cc8c60f1fe489e49c68”), 
“name” : undefined 
}, 

“_id” : ObjectId(“57ce1cdbc60f1fe489e49c69”), 
“name” : “123” 

]

 

 

参考:https://blog.csdn.net/Just_Walking/article/details/73332226

https://docs.mongodb.com/manual/core/views/#create-view

 https://docs.mongodb.com/manual/core/document/

https://blog.csdn.net/leshami/article/details/52668870

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/287048
推荐阅读
相关标签
  

闽ICP备14008679号