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子文档查询的相关推荐等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)