mongodb内嵌文档的javaapi,增删改查
数据结构:
{"_id" : "000000001", //Mongodb默认主键
"UID" : "000000001", //SVC UID
"CREATE_DATE" : "2016-10-21 00:00:00", //创建时间
"OP_DATE" : "2016-10-21 00:00:00", //修改时间
"BASE_TAG_LIST" : //基础标签列表
[
{ "TAG_ID" : "A01", "TAG_CODE" : "1", "TAG_VALUE" : "1" }, //详细标签,此处为内嵌文档
{ "TAG_ID" : "A02", "TAG_CODE" : "0", "TAG_VALUE" : "0" },
{ "TAG_ID" : "A03", "TAG_CODE" : "000000", "TAG_VALUE" : "000000" }
]}
内嵌文档创建符合索引:
MongoCollection<Document> collection = db.getCollection(table);
Document docIndex = new Document();
for (int index = 0;index<list.size();index++){
String indexPara = (String)list.get(index);
String[] indexParaList = indexPara.split("\\+");
System.out.println(indexParaList[0]);//key
System.out.println(indexParaList[1]);//+-1
//组合复合索引
docIndex.append(indexParaList[0],Integer.parseInt(indexParaList[1]));
}
collection.createIndex(docIndex); 普通查询:
命令:db.tag.find({ "UID": "000000001" )
java:
BasicDBObject doc = new BasicDBObject();
doc.put("UID",uid);
MongoCollection<Document> collection = db.getCollection(table);
FindIterable<Document> iterable = collection.find(doc);
/**
* 1. 获取迭代器FindIterable<Document> 2. 获取游标MongoCursor<Document>
* 3.通过游标遍历检索出的文档集合
* */ List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
MongoCursor<Document> cursor = iterable.iterator();
while (cursor.hasNext()) {
Document user = cursor.next();
}
内嵌文档查询:
命令:
db.tag.find({"BASE_TAG_LIST.": { $all: [{$elemMatch: {TAG_ID: "A01", TAG_VALUE: "0"}}, {$elemMatch: {TAG_ID: "A02", TAG_VALUE: "1"}}] }})
java:
List dBObjectElelist = new ArrayList<BasicDBObject>();
for (Map.Entry<String, String> entry : map.entrySet()) {
BasicDBObject doc1 = new BasicDBObject();
doc1.put("TAG_ID",entry.getKey());
doc1.put("TAG_VALUE",entry.getValue());
BasicDBObject EleDoc = new BasicDBObject("BASE_TAG_LIST",new BasicDBObject("$elemMatch", doc1));
dBObjectElelist.add(EleDoc);
} BasicDBObject queryObject = new BasicDBObject()
.append(QueryOperators.AND,dBObjectElelist );
FindIterable<Document> cursor = db.getCollection("bdp_user_tag").find(queryObject); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
for (Document d: cursor) {
String jsonString = d.toJson();
Map<String, Object> jsonStrToMap = JsonStrToMap
.jsonStrToMap(jsonString);
list.add(jsonStrToMap);
}
return list; 内嵌文档的删除和添加修改:
需求:
修改用户的标签。比如,用户的标签是A01, 标签值是0。
实现场景1:修改标签值
实现场景2:删除标签A01
实现场景3:添加标签A05
修改:
//查找到uid,基础标签tagvalue所在的文档 oldDoc ,得到docUpdate文档
Document oldDoc= new Document("UID",uid);
Document docUpdate= baseIterable.first();//Document d = collection.find(oldDoc).first();
//由文档得到内嵌文档的key,得到内嵌文档的value数组:这时可以对内嵌文档进行数组型的修改
ArrayList<Document> arr=(ArrayList<Document>)(docUpdate.get("BASE_TAG_LIST"));
Integer oldtagIndex = null;
for (int index =0;index < arr.size();index++){
Document docEle = arr.get(index);
if(docEle.get("TAG_ID").equals(tagid) && docEle.get("TAG_VALUE").equals(oldTagvalue)){
oldtagIndex = index;
}
}
if(null != oldtagIndex){
Document arrEleUpdate = arr.get(oldtagIndex);
arrEleUpdate.remove("TAG_VALUE");
arrEleUpdate.put("TAG_VALUE",newTagvalue);
Document newDoc = new Document("BASE_TAG_LIST",arr);
//更新操作,本质是取出内嵌文档的数组,进行修改后更新
collection.updateOne(oldDoc, new Document("$set",newDoc));
} 内嵌文档的添加和删除:
是对上文中arr数组内元素的删除和添加:
删除:arr.remove(int变量);
添加:arr.add(new Document().append(key,value));
mongodb内嵌文档的javaapi,增删改查的更多相关文章
- MongoDB 内嵌文档
MongoDB是文档型的数据库系统,doc是MongoDB的数据单位,每个doc相当于关系型数据库的数据行(row),doc和row的区别在于field的原子性:row中的column是不和分割的原子 ...
- mongodb内嵌文档的查询
本文转自:http://blog.163.com/wm_at163/blog/static/1321734902012526103825481/ 1 > db.blog.findOne() { ...
- MongoDB内嵌文档操作
实体定义: [BsonIgnoreExtraElements] public class Person : BaseEntity { public string FirstName { get; se ...
- MongoDB学习笔记——文档操作之增删改
插入文档 使用db.COLLECTION_NAME.insert() 或 db.COLLECTION_NAME.save() 方法向集合中插入文档 db.users.insert( { user_id ...
- 多测师讲解接口 _需求文档(用户增删改查)_高级讲师肖sir
首先连接Duoceshi_new网络 密码为Duoceshi_new,因为接口项目部署在Duoceshi_new网段中. 测试工具:postman域名:http://192.168.1.2:8081/ ...
- mongodb对数组元素及内嵌文档进行增删改查操作(转)
from:https://my.oschina.net/132722/blog/168274 比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: &l ...
- MongoDB对数组元素及内嵌文档进行增删改查操作
比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: { "_id" : "195861", &qu ...
- mongodb查询内嵌文档
mongodb查询内嵌文档 假设有这样一个文档: db.XXX.remove(); db.XXX.insert({"id":1, "members":[{& ...
- MongoDB查询或修改内嵌文档
作为非关系型数据库中的佼佼者,MongoDB一大优势在于能够在一条文档中存储对象类型的数据,适当增加冗余来让数据库更好用.文档中一个对象类型的字段在MongoDB中被称为内嵌文档(Embedded) ...
随机推荐
- 使用 nodeJs 开发微信公众号(上传图片)
在给用户发送消息中涉及到的素材(图片.视频.音频.文章等)需要事先传到微信服务器,然后获得媒体id(media_id),然后把 media_id 传递给用户 上传分上传临时素材(只保存三天)和上传永久 ...
- JavaFX(Maven 方式)
运行界面第一种方式 运行界面第二种方式 参考文献 https://github.com/AlmasB/JavaFX11-example
- python视频学习笔记2(if)
一.if语句1.比较运算符,if语句语法 # 1. 输入用户年龄# 2. 判断是否满 18 岁 (**>=**)# 3. 如果满 18 岁,允许进网吧嗨皮# 4. 如果未满 18 岁,提示回家写 ...
- 百度地图点聚合MarkerClusterer性能优化
公司要求做个百度地图点聚合的性能优化,需一次性加载9万条数据. 记录下自己的优化过程.(只想看优化代码的可直接移步:步骤三) 一.引入百度地图 vue项目中,在index.html文件中用script ...
- CPU TFLOPS 计算
CPU TFLOPS 计算 姚伟峰 yaoweifeng0301@126.com] http://www.cnblogs.com/Matrix_Yao/ 深度学习任务是一个计算密集型任务,所以很关注计 ...
- RabbitMQ消费者抛异常日志持续打印的问题
场景 消费者接受消息,进行一系列处理,但是由于某些原因处理过程中该消费者的抛出了异常,并且不捕获(直接 throws IOException 抛出去): 由于抛出了IOException,那么这条消息 ...
- Selenium+Java的TestNG测试报告优化
本博主很懒,但学习很勤快,一般能从博客园直接转载的东西,本博主绝不动手写,无奈Selenium+java生成的测试报告在百度上搜索..反正我是没有看到.后来才知道TestNG它可以自动生成测试报告,但 ...
- java编译带中文是显示乱码的错误
FirstJava.java:3: 错误: 编码GBK的不可映射字符 System.out.println("娆㈣繋瀛︿範Java绋嬪簭锛?")锛? ^FirstJava.java ...
- echarts简单的折线图
加jar包 <script src="<%=path %>/js/echarts.min.js"></script> 首先 在jsp页面中 选好 ...
- AD域 组策略部署U软件
1.首先把需要部署的软件放到活动目录共享文件夹中.(只支持MSI格式的软件) 2.打开组策略管理工具. 3.选择域名右键,创建GPO. 4.在弹出的新建GPO窗口中,输入策略名称. 5.在新创建的策略 ...