zoukankan      html  css  js  c++  java
  • Mongodb中 Documents文档说明

    mongodb使用BSON格式存储数据记录. 如下图:

    A MongoDB document.

    文档结构

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

    {
        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".

    For examples querying arrays, see:

    嵌入的文档

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

    "<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".

    For examples querying embedded documents, see:

    文档的局限性

    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> },
        ...
    }​

    For examples, see:

    举一个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")​

    还有and 和or 的用法,想看的看这个文档Query Documents.

    更新指定的文档

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

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

    For examples, see Update specifications.

    索引规范文档

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

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

    翻译自官网: https://docs.mongodb.com/manual/core/document/ 

    转发注明出处: http://www.cnblogs.com/jycboy/p/8718320.html

  • 相关阅读:
    全面监测网站信息
    linux 将Mysql的一张表导出至Excel格式文件
    渗透测试人员发现用户可无限输入密码次数,超过5次未锁定用户,存在暴力破解风险。解放方案:限制每个输入的用户名(不管存不存在该账户)登陆失败次数不超过5次,超过则锁定该用户
    mysql linux下数据库导出 常用操作
    find php.ini 和 php的执行目录 bin目录
    解决:The “https://packagist.laravel-china.org/packages.json” file could not be downloaded
    如何上传代码至GitHub
    7. Jmeter-逻辑控制器介绍与使用
    19、Linux命令对服务器内存进行监控
    20、Linux命令对服务器磁盘进行监控
  • 原文地址:https://www.cnblogs.com/jycboy/p/8718320.html
Copyright © 2011-2022 走看看