由于mongo的弱关联关系,导致mongo的内嵌数组会被频繁使用,以达到一定的"关联关系"。所以对mongo的数组的操作也是非常重要的。接下来简单的介绍一下mongo对数组的操作,至于用java进行这些操作,请参考java对mongo的基本操作,套用一下即可
操作符:
$push
向已有的数组末尾加入一个元素,若数组不存在则会自动创建数组,可以增加重复元素。
例句:db.blog.update({"title":"A"},{$push:{"comments":{"testAdd":"T"}}});
则向blog集合中的title为A的文档中的comments数组中的末尾增加了
{"testAdd":"T"}记录,如果文档中没有comments数组,则会自动创建comments数组,然后进行添加,但是如果匹配的条件
{"title":"A"}不存在则不会自动添加,而是添加失败。
操作符:
$addToSet
可以向数组内增加元素,但是如果元素已存在(重复元素),则增加失败
例句:
db.blog.update
({"title":"A"},{$addToSet:{"comments":{"testAdd":"T"}}});
则向blog集合中的title为A的文档中的comments数组中的末尾增加了
{"testAdd":"T"}记录,如果文档中没有comments数组,则会自动创建comments数组,但是如果第二次执行同样的语句则会发现数据库中并没有进行添加操作,因为数据这时重复了
$addToSet
还可以和
$each
进行配合使用,一次向数组中添加多条内容
例句:
db.blog.update
({"title":"A"},{$addToSet:{"comments":{$each:[{"testAdd":"T"},
{"testAdd":"X"}
]}}});
则向blog集合中的title为A的文档中的comments数组中的末尾增加了
{"testAdd":"T"}和
{"testAdd":"X"}
记录,这里注意$each后面跟的是一个数组,他会遍历数组中的内容,一一执行
操作符:
$pop
从数组的一端删除元素
例句:
db.blog.update
({"title":"A"},{$pop:{"comments":1}})
;
则删除了blog集合中的title为A的文档中的comments数组中的最后一条记录
,1::删除最后一条数据,-1:删除第一条数据
但是很多情况下我们需要根据条件去删除一下数组中的记录,这是$pop就帮不上什么忙了,就需要下一个操作符了
操作符:
$pull
例句:
db.blog.update
({"title":"A"},{$pull:{"comments":{"testAdd":"T"}}});
则删除了blog集合中的title为A的文档中的comments数组中所有满足条件
{"testAdd":"T"}的元素
操作符:
$set
修改数组中的元素
例句:
db.blog.update
({"comments.testA
dd":"T"},{$set:{"comments.$.testAdd":"z"}});
这里注意第一个查询条件必须数组.字段名,否则修改失败,有人可能会问后面的
{"comments.$.testAdd":"z"}中的$符是干嘛用的,他在这里面代表的相当于是数组的下表,如果我们明确的知道下标的话,我们完全可以这么写,比如下表为0:
{"comments.0.testAdd":"z"},但大多数情况下我们是不知道下标的,所以用通配符$来表示,这样只会修改匹配的第一条数据,而不是所有匹配到的数据,这点需要注意
例句:db.blog.find({"comments.testAdd":"T"})
这里返回的是整个文档,至于如何返回想要的结果接下来的博客会介绍。
由于mongo的弱关联关系,导致mongo的内嵌数组会被频繁使用,以达到一定的"关联关系"。所以对mongo的数组的操作也是非常重要的。接下来简单的介绍一下mongo对数组的操作,至于用java进行这些操作,请参考java对mongo的基本操作,套用一下即可1、增加
MongoDB
的文档类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6种数据类型(null、布尔、数字、字符串、
数组
及对象).
JSON的数据类型的局限性:
1.无日期类型,对日期型的处理较为繁琐
2.无法区分浮点数和整数、32位和64位
3.其他类型表示局限 如函数、正则式等
Mongodb
使用BSON(Binary JSON)来组织数据,BSON还提供日期、32位数字、64位数字等类型。下面为在
mongodb
shell中这些类型在文档中是如何表示:
1、null 用于表示空值或者不存在的字段。
{“name”:null}
2.布尔 布尔类型、即true和false
Mongo
Template 并列条件查询和
数组
字段
追加
操作
前言Demo环境一、
Mongo
Template一个提醒二、使用步骤1.引入库2.连接
MongoDB
集群3.1.并列查询document的pojo同时 and + or 查询映射的查询语句3.2.
数组
字段的
追加
操作
映射的语句总结
这里我们使用
Mongo
Template来完成并列的and、or 查询和对document里的
数组
字段的
追加
操作
。
Demo环境
最近公司需要使用
mongodb
作为一个无知的我,学习了一下,翻阅了大量的教程,简单的就不说了。附个链接:
http://www.runoob.com/
mongodb
/
mongodb
-tutorial.html
关于
内嵌
对象,当时搞得头大。所以这里总结一下,做个笔记。
1、
Java
Bean对象
public class EventRead implements Serializable ...
import py
mongo
client = py
mongo
.
Mongo
Client("
mongodb
://localhost:27017/")
db = client["test"]
col = db['test']
col.drop()
docs=[
{'name':{'first':'wang','last':'ming'},'age':15,'score':[{'chi':60...
#
mongo
建立连接
if replicaset_
mongo
:
self.client =
Mongo
Client([host1_
mongo
, host2_
mongo
], replicaSet=replicaset_
mongo
, port=int(port_
mongo
))
self.client.admin.auth...
可以使用
Mongo
Template的updateFirst或者updateMulti方法来修改
数组
。具体方法是通过Query对象指定要修改的文档,然后使用Update对象来指定要修改的
数组
操作
。比如要向一个
数组
中添加新元素,可以使用$push
操作
,代码如下:
Query query = new Query(Criteria.where("id").is("xxx"));
Update update = new Update().push("arrayFieldName", "newElement");
mongo
Template.updateFirst(query, update, collectionName);
其中,id为文档的主键值,arrayFieldName为要修改的
数组
字段名,newElement为要添加的新元素。updateFirst方法表示只修改第一个匹配的文档,如果要修改所有匹配的文档则使用updateMulti方法。需要注意的是,如果要修改的
数组
不存在,则会自动创建。