mongoDB-document

mongoDB-document,第1张

MongoDB 将数据记录存储为 BSON类型文档(document)。 BSON 是一种二进制数据类型,是json 的一种扩展, bson 支持了更多的数据类型。 下图就是一个document(文档) 示例:

document 的数据结构如下所示:由若干个字段-值对组成,其中字段的值可以是任何 BSON 数据类型 ,包括嵌入式数据结构如 其他文档、数组和文档数组等。

如下申明了一个mydoc 的文档,

字段(field)的命名都是由字符串组成

字段名称有以下几条限制:

对于不同的字段类型的存储 *** 作,字段名称验证规则并不相同。下面总结了不同的插入和更新 *** 作如何处理以美元 ($) 为前缀的字段名称

修改非 $ 前缀的字段

修改非 $ 前缀的最外层字段,通过 literal 实现

使用管道创建一个名为spring2022的新集合,更新 $ 为前缀的 $term 字段

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

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

示例:

要使用点表示法指定或访问嵌入文档的字段,请将嵌入文档名称与点 () 和字段名称连接起来,并用引号引起来

示例:

BSON 文档的最大大小为 16 兆字节

最大文档大小有助于确保单个文档不会使用过多的 RAM,或者在传输期间不会使用过多的带宽。为了存储大于最大大小的文档,MongoDB 提供了 GridFS API。

与 JavaScript 对象不同,BSON 文档中的字段是有序的

查询 *** 作时字段顺序:

写 *** 作时字段顺序

对于写入 *** 作,MongoDB 保留文档字段的顺序,但以下情况除外:

在 MongoDB 中,存储在集合中的每个文档都需要一个唯一的 _id 字段作为主键。如果插入的文档省略了 _id 字段,MongoDB 驱动程序会自动为 _id 字段生成一个 ObjectId。 这也适用于通过带有 upsert: true 的更新 *** 作插入的文档

_id 字段具有以下限制:

_id 字段常用值:

按照常理,把如下命令

/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/mlog --directoryperdb

放在/etc/rclocal文件中就可以实现开机自启动了,第一次重启机器发现mongodb顺利启动了,再次重启机器后,通过ps没有查看到相应mongod进程,也就是启动失败了。原因是由于重启机器,导致非正常停止mongod服务,mongodlock中还记录了上次运行的进程号,为了数据的安全需要执行

/usr/local/mongodb/bin/mongod –repair,

当然如果直接把mongodlock文件删除也可以重新启动了,例如:

/usr/local/mongodb/bin/mongod --repair

/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/mlog --directoryperdb

rm -rf /data/db/mongodlock

/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/mlog --directoryperdb

注意上述启动Mongodb都是没有增加journal参数,如果带了此参数就不会那么麻烦了,例如

/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/mlog --directoryperdb --journal就可以了,就算是非正常重启机器,mongodb也会根据日志去修复数据库的。

另外,如果mongodb的数据目录是通过mount的NFS文件夹,自启动好像有问题的。

应该定义为:

{ "year":"2013",

"month" : "7" ,

"data" : [{"day":"10" , "n" : 1, "t" : 2, "u" : 1 },

{ "day":"9" , "n" : 1, "t" : 3, "u" : 1 }] ,

"_id" : ObjectId("51d543a4bf04dad221000001")}

然后查询可以这样查

dbtestfind( {"year":2013,"month":7 , "dataday" :10 } );

BSON数据的主要类型有:A,D,E,M和Raw。其中,A是数组,D是切片,M是映射,D和M是Go原生类型。

A类型表示有序的BSON数组。

bsonA{"bar", "world", 314159, bsonD{{"qux", 12345}}}

D类型表示包含有序元素的BSON文档。这种类型应该在顺序重要的情况下使用。如果元素的顺序无关紧要,则应使用M代替。

bsonD{{"foo", "bar"}, {"hello", "world"}, {"pi", 314159}}

M类型表示无序的映射。

bsonM{"foo": "bar", "hello": "world", "pi": 314159}

E类型表示D里面的一个BSON元素。

Raw类型代表未处理的原始BSON文档和元素,Raw系列类型用于验证和检索字节切片中的元素。当要查找BSON字节而不将其解编为另一种类型时,此类型最有用。

Mongo-Driver驱动包官方文档

BSON包官方文档

mongo包官方文档

options包官方文档

1

2

3

4

5

Criteria criteria = new Criteria()andOperator(

Criteriawhere("createDate")gte(dateFormatparseObject("2014-10-01 00:00:00")),

Criteriawhere("createDate")lt(dateFormatparseObject("2014-11-01 00:00:00"))

);

mongoTemplategroup(criteria, "collectionName", new GroupBy("GroupField"), entityClass);

1

2

3

4

5

<dependency>

<groupId>orgmongodb</groupId>

<artifactId>mongo-java-driver</artifactId>

<version>2123</version>

</dependency>

获取MongoDB存储的数据,往往不是直接提取出来就可以使用的,需要对数据进行处理和分析后才可以使用。MongoDB提供了三种执行聚合的方式:聚合管道,map-reduce 函数和单一目的聚合方法。

其中每个'{}'标识一个阶段。

用于过滤数据,只输出符合条件的文档,SQL Example:

MongoDB Example:

将集合中的文档分组,可用于统计结果,SQL Example:

即将machineId进行分组后,对price进行求和。

修改输入文档的结构,限定结果集合,SQL Example:

MongoDB Example:

MongoDB Example:

MongoDB 聚合运算符还有很多,这里只对常用的做了简单的描述,具体的可以参照下表:

聚合管道 *** 作有如:分组( project)、排序( count)等,每个 *** 作在管道中叫做阶段(stage),每个阶段执行的结果会给下一个阶段。

如图:

/images/map-reducebakedsvgsvg

其类似Linux中的管道 *** 作:

分四步:

上面示例分为三步:

查询结果为:

MongoDB Documentation aggregation

MongoDB权威指南

比如你的集合是:

  {   "a" : 1,   "_id" : {   "$oid" : "51d544ddcc93742c16097f97"   }   },

  {   "a" : 2,   "_id" : {   "$oid" : "51d544e4cc93742c16097f98"   }   },

  {   "1_2_3" : "a,b,c",   "_id" : {   "$oid" : "51d544fecc93742c16097f9c"   }   },

  {   "1_2_3" : 3,   "_id" : {   "$oid" : "51d5450dcc93742c16097f9d"   }   }

]

在mongo shell里面:

dbusersfind({"1_2_3":{$exists:true}})

会返回后两条。

用:

dbusersfind({"1_2_3":{$type:2}})

会返回"a,b,c"那条。

以上就是关于mongoDB-document全部的内容,包括:mongoDB-document、linux下怎么打开mongodb的帮助文档、如何进行mongodb子文档查询的相关推荐等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9311832.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存