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相关推荐

  1. MongoDB Java API操作很全的整理以及共享分片模式下的常见操作整理

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,一般生产上建议以共享分片的形式来部署. 但是MongoDB官方也提供了其它语言的客户端操作API.如下图所示: 提供了C.C++ ...

  2. java集合——数组列表(ArrayList)+散列集(HashSet)

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java集合--数组列表(ArrayList)+散列集(HashSet) 的相关知识: 0.2 ...

  3. 近5年133个Java面试问题列表

    2019独角兽企业重金招聘Python工程师标准>>> Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接 ...

  4. 转载:mongoDB java驱动学习笔记

    http://www.blogjava.net/watchzerg/archive/2012/09/22/388346.html mongoDB java驱动学习笔记 指定新mongo实例: Mong ...

  5. Mongodb java 例子

    该文档是翻译自文档[mongodb-docs-2010-10-24.pdf]的[Java Language Center]章节,根据自己的理解整理而成. 希望能给像我这样开始接触的朋友一点帮助,同时也 ...

  6. MongoDB+java+spirng+morphia

    MongoDB+java+spirng+morphia Hotle.java packagetest_yu.morphiaSpring;importcom.google.code.morphia.an ...

  7. mongodb java 开源_开源的Mongodb java client -- mango发布

    Mango  ----   一个非常简单的操作mongodb的小工具,使用java语言,基于mongodb的java driver包. 其主要的灵感来自于Jongo 项目,这是一个非常有创意的工具,将 ...

  8. 太肝了、最近5年183个Java面试问题列表及回答(值得收藏)

    作者: YHGui https://github.com/YHGui/easy-job/ 精彩推荐 一百期Java面试题汇总 SpringBoot内容聚合 IntelliJ IDEA内容聚合 Myba ...

  9. 最近5年133个Java面试问题列表

    前段时间在ImportNew上看到了一篇名为 " 最近5年133个Java面试问题列表 " 的翻译来的文章,里面非常详细地给出了Java中各个方面的面试题,很难得见到如此详尽又高质 ...

最新文章

  1. ensp支持哪个版本virtualbox_如何在 Fedora 中安装 VirtualBox
  2. 全国大学生电子设计大赛 赛前准备
  3. 今儿新学会一个写日志技能:双缓冲机制
  4. matplotlib之scatter散点、bar直方图(笔记四)
  5. JavaSE02 数组的基本知识
  6. 颜色(color)、字体(Fonts)管理(颜色的 hex 表示)
  7. Python 数据结构与算法——插入排序(insertion sort)
  8. Linux下源码安装ElasticResearch
  9. 当ligerui的grid出现固定列与非固定列不在同一水平线上时,改怎么处理
  10. 3x3矩阵怎么求逆矩阵_矩阵型组织结构,郭士纳与任正非都是怎么说的?
  11. Visual Studio 2019 配置汇编和masm32教程
  12. iOS项目添加pch文件
  13. java.lang.RuntimeException: Performing stop of activity that is not resumed OOM了也会造成之前Activity被系统杀掉
  14. 电脑系统时间同步问题处理
  15. 偏差,残差,方差在机器学习中的区别
  16. 学会读源码,很重要!
  17. 儿童高脚椅、餐椅安全标准ASTM F404
  18. 【单点登录】禅道实现三方免密登录
  19. coolq使用(一)
  20. 英语计算机答题卡模板,英语答题卡模板.doc

热门文章

  1. python导包的问题_python中包引入遇到的问题
  2. 使用Android模拟器调试linux内核
  3. BIOS和BMC的介绍
  4. 实时查询引擎 - Apache Drill 介绍与应用
  5. QT——简单介绍 *.pro、*.pri、*.prf、*.prl四种文件
  6. android手机截图gif,bash 一键录屏 Android 生成 gif 文件脚本
  7. VMWare常见问题-CPU虚拟化引擎
  8. 库卡机器人会卡顿吗_KUKA机器人使用经验总结
  9. 2018 “Z世代”未成年人游戏玩家洞察 | MobData
  10. C++第9周项目5参考——求一元二次方程的根