mongodb java upsert_MongoDB - 涉及列表的upsert
EDITED TO INCLUDE CORRECT SOLUTION
这正是我学习Mongo的问题 - 你正在寻找与 update 命令一起使用的 $addToSet 运算符(see docs here),以及你正在使用的 $ 位置运算符 .
$ addToSet {$ addToSet:{field:value}}仅当数组不在数组中时才向数组添加值 .
因此查询变为(db.stack是我用于测试目的的集合),示例运行如下:
db.stack.update({ "trips.name":"2010-05-10" },
{ $addToSet: { "trips.$.loc":{"lat":11, "lng":12} } }
);
TEST RUN(带有一些不重要元素空间的缩写):
#### YOUR ITEM IN THE DB
> db.stack.find({"trips.name":"2010-05-10"})
{ "_id" : ObjectId("4c28f62cbf8544c60506f11d"), "some_other_data" : "goes here",
"trips" : [
{ "name" : "2010-05-10",
"loc" : [ {
"lat" : 21.321231,
"lng" : 16.8783234,
"updated_at" : "Mon May 10 2010 15:24:35"
}, { "lat" : 21.321231,
"lng" : 16.8783234,
"updated_at" : "Mon May 10 2010 15:24:24"
} ] },
{ "name" : "2010-05-08",
"loc" : [ ... ]
} ] }
#### SUCCESSFULLY ADDS ITEM TO PROPER ARRAY
> db.stack.update({"trips.name":"2010-05-10"}, {$addToSet: {"trips.$.loc":{"lat":11, "lng":11}}});
> db.stack.findOne()
{ "_id" : ObjectId("4c28f62cbf8544c60506f11d"), "some_other_data" : "goes here",
"trips" : [
{ "loc" : [
{ "lat" : 21.321231,
"lng" : 16.8783234,
"updated_at" : "Mon May 10 2010 15:24:35"
}, { "lat" : 21.321231,
"lng" : 16.8783234,
"updated_at" : "Mon May 10 2010 15:24:24"
}, { "lat" : 11,
"lng" : 11
}
], "name" : "2010-05-10"
},
{ "name" : "2010-05-08",
"loc" : [ ... ]
} ] }
#### ON REPEAT RUN DOESN'T ADD NEW ELEMENT
> db.stack.update({"trips.name":"2010-05-10"}, {$addToSet: {"trips.$.loc":{"lat":11, "lng":11}}});
> db.stack.findOne()
{ "_id" : ObjectId("4c28f62cbf8544c60506f11d"), "some_other_data" : "goes here",
"trips" : [ {
"loc" : [
{ "lat" : 21.321231,
"lng" : 16.8783234,
"updated_at" : "Mon May 10 2010 15:24:35"
}, { "lat" : 21.321231,
"lng" : 16.8783234,
"updated_at" : "Mon May 10 2010 15:24:24"
}, { "lat" : 11,
"lng" : 11
}
], "name" : "2010-05-10"
},
{ "name" : "2010-05-08",
"loc" : [ ... ]
} ] }
#### BUT WILL CORRECTLY ADD ANOTHER ELEMENT TO THE SAME ARRAY IF IT'S NOT PRESENT
> db.stack.update({"trips.name":"2010-05-10"}, {$addToSet: {"trips.$.loc":{"lat":11, "lng":12}}});
> db.stack.findOne()
{ "_id" : ObjectId("4c28f62cbf8544c60506f11d"), "some_other_data" : "goes here",
"trips" : [
{ "loc" : [
{ "lat" : 21.321231,
"lng" : 16.8783234,
"updated_at" : "Mon May 10 2010 15:24:35"
}, { "lat" : 21.321231,
"lng" : 16.8783234,
"updated_at" : "Mon May 10 2010 15:24:24"
}, { "lat" : 11,
"lng" : 11
}, { "lat" : 11,
"lng" : 12
}
], "name" : "2010-05-10"
},
{ "name" : "2010-05-08",
"loc" : [ ... ]
} ] }
mongodb java upsert_MongoDB - 涉及列表的upsert相关推荐
- MongoDB Java API操作很全的整理以及共享分片模式下的常见操作整理
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,一般生产上建议以共享分片的形式来部署. 但是MongoDB官方也提供了其它语言的客户端操作API.如下图所示: 提供了C.C++ ...
- java集合——数组列表(ArrayList)+散列集(HashSet)
[0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java集合--数组列表(ArrayList)+散列集(HashSet) 的相关知识: 0.2 ...
- 近5年133个Java面试问题列表
2019独角兽企业重金招聘Python工程师标准>>> Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接 ...
- 转载:mongoDB java驱动学习笔记
http://www.blogjava.net/watchzerg/archive/2012/09/22/388346.html mongoDB java驱动学习笔记 指定新mongo实例: Mong ...
- Mongodb java 例子
该文档是翻译自文档[mongodb-docs-2010-10-24.pdf]的[Java Language Center]章节,根据自己的理解整理而成. 希望能给像我这样开始接触的朋友一点帮助,同时也 ...
- MongoDB+java+spirng+morphia
MongoDB+java+spirng+morphia Hotle.java packagetest_yu.morphiaSpring;importcom.google.code.morphia.an ...
- mongodb java 开源_开源的Mongodb java client -- mango发布
Mango ---- 一个非常简单的操作mongodb的小工具,使用java语言,基于mongodb的java driver包. 其主要的灵感来自于Jongo 项目,这是一个非常有创意的工具,将 ...
- 太肝了、最近5年183个Java面试问题列表及回答(值得收藏)
作者: YHGui https://github.com/YHGui/easy-job/ 精彩推荐 一百期Java面试题汇总 SpringBoot内容聚合 IntelliJ IDEA内容聚合 Myba ...
- 最近5年133个Java面试问题列表
前段时间在ImportNew上看到了一篇名为 " 最近5年133个Java面试问题列表 " 的翻译来的文章,里面非常详细地给出了Java中各个方面的面试题,很难得见到如此详尽又高质 ...
最新文章
- ensp支持哪个版本virtualbox_如何在 Fedora 中安装 VirtualBox
- 全国大学生电子设计大赛 赛前准备
- 今儿新学会一个写日志技能:双缓冲机制
- matplotlib之scatter散点、bar直方图(笔记四)
- JavaSE02 数组的基本知识
- 颜色(color)、字体(Fonts)管理(颜色的 hex 表示)
- Python 数据结构与算法——插入排序(insertion sort)
- Linux下源码安装ElasticResearch
- 当ligerui的grid出现固定列与非固定列不在同一水平线上时,改怎么处理
- 3x3矩阵怎么求逆矩阵_矩阵型组织结构,郭士纳与任正非都是怎么说的?
- Visual Studio 2019 配置汇编和masm32教程
- iOS项目添加pch文件
- java.lang.RuntimeException: Performing stop of activity that is not resumed OOM了也会造成之前Activity被系统杀掉
- 电脑系统时间同步问题处理
- 偏差,残差,方差在机器学习中的区别
- 学会读源码,很重要!
- 儿童高脚椅、餐椅安全标准ASTM F404
- 【单点登录】禅道实现三方免密登录
- coolq使用(一)
- 英语计算机答题卡模板,英语答题卡模板.doc
热门文章
- python导包的问题_python中包引入遇到的问题
- 使用Android模拟器调试linux内核
- BIOS和BMC的介绍
- 实时查询引擎 - Apache Drill 介绍与应用
- QT——简单介绍 *.pro、*.pri、*.prf、*.prl四种文件
- android手机截图gif,bash 一键录屏 Android 生成 gif 文件脚本
- VMWare常见问题-CPU虚拟化引擎
- 库卡机器人会卡顿吗_KUKA机器人使用经验总结
- 2018 “Z世代”未成年人游戏玩家洞察 | MobData
- C++第9周项目5参考——求一元二次方程的根