mongodb中对数组的操作命令
mongodb中对数组的操作命令有
$push、$ne、$addtoset、$pop、$pull
###addtoset会碰到的问题
addtoset解释: 往数组里面加入数据,如果数组里已经存在,则不会加入(避免重复) 。
以加一个加好友的操作为例子,当加好友时,除了好友ID, 还需要成为好友的时间戳时(addtime)。
{
"_id" : 100000,
"friedns" : [
{
"uid" : 100001,
"addtime" : NumberLong(1532676854771)
}
]
}
1
2
3
4
5
6
7
8
9
此时,更改一下addtime,再执行一次uid10001的addtoset
语句为:
db.friendship.update(
{"_id":100000}
,
{"$addToSet":{"friedns":{"uid":NumberInt(100001),"addtime":NumberLong(1532676854770)}}}
)
1
2
3
4
5
这时问题就来了:结果只是因为时间戳变了,又添加了一个相同的好友:
{
"_id" : 100000,
"friedns" : [
{
"uid" : 100001,
"addtime" : NumberLong(1532676854771)
},
{
"uid" : 100001,
"addtime" : NumberLong(1532676854770)
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
说明addtoset只能用在固定的数组对象中。
###使用ne+push解决问题
db.friendship.update(
{"_id":100000, "friedns.uid": {$ne: 100001}}
,
{"$push":{"friedns":{"uid":NumberInt(100001),"addtime":NumberLong(1532676854770)}}}
)
1
2
3
4
5
ne方案解释: 一个特定值不在数组里时就把它加进去,避免重复数据
这时只会对uid进行重复判断,问题解决。
————————————————
版权声明:本文为CSDN博主「iamfrankjie」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/iamfrankjie/article/details/81238619
mongodb中对数组的操作命令的更多相关文章
- 根据数组下标在MongoDB中修改数组元素
如下图这样的数据: 即文档中某个字段是一个数组,而每个数组元素又是一个对象,现在需求是对每个对象中的content字段值作情感分析后,把情感分析得到的结果增加到这个对象中去. 如上图中第1个元素,修改 ...
- MongoDB学习总结(二) —— 基本操作命令(增删改查)
上一篇介绍了MongoDB在Windows平台下的安装,这一篇介绍一下MongoDB的一些基本操作命令. 下面我们直奔主题,用简单的实例依次介绍一下. > 查看所有数据库 (show dbs) ...
- MongoDB中的数据类型
mongoDB中存储的数据单元被称作文档.文档的格式与JSON很类似,只不过由于JSON表达的数据类型范围太小(null,boolean,numeric,string和object),mongoDB对 ...
- 浅析mongodb中group分组
这篇文章主要介绍了浅析mongodb中group分组的实现方法及示例,非常的简单实用,有需要的小伙伴可以参考下. group做的聚合有些复杂.先选定分组所依据的键,此后MongoDB就会将集合依据选定 ...
- 使用aggregate在MongoDB中查找重复的数据记录
我们知道,MongoDB属于文档型数据库,其存储的文档类型都是JSON对象.正是由于这一特性,我们在Node.js中会经常使用MongoDB进行数据的存取.但由于Node.js是异步执行的,这就导致我 ...
- MongoDB中的group
在Mongodb的查询中,有类似于SQL中group by功能的group函数.两者的功能有些类似,但是区别也是比较明显的. 对于SQL来说,group by的作用就是安装依据列来将数据表中的记录分成 ...
- MongoDB实战指南(五):MongoDB中的聚集分析
聚集操作是对数据进行分析的有效手段.MongoDB主要提供了三种对数据进行分析计算的方式:管道模式聚集分析,MapReduce聚集分析,简单函数和命令的聚集分析. 1. 管道模式进行聚集 这里所说的管 ...
- 【转载】MongoDB中的MapReduce 高级操作介绍
转载自残缺的孤独 1.概述 MongoDB中的MapReduce相当于关系数据库中的group by.使用MapReduce要实现两个函数Map和Reduce函数.Map函数调用emit(key,va ...
- mongodb中数据类型的坑
在mongodb中,我们给每个文档插入数据的时候,mongodb自动会为我们插入的数据创建数据类型.由于mongodb是一个非结构化的数据存储系统,因此在文档中你可以随意插入不同类型的字段,这和MyS ...
随机推荐
- 那些吓人的 Linux 命令
本文转载于其它网站,原作者如有问题,请您及时联系我,及时删除! 哪些Linux命令会让人联想到妖魔鬼怪?不妨好好瞧一瞧! 每年一度的万圣节马上就要到来,是时候稍微关注一下Linux那吓人的一面了.哪些 ...
- python_网络编程socket(TCP)
服务端: import socket sk = socket.socket() #创建对象 sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) ...
- c语言1博客作业10
一.本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/10101 ...
- sql prompt工具
SQL Prompt是一款拥有SQL智能提示功能和格式化Sql代码插件.可用于的SQL Server和VS. SQL Prompt能根据数据库的对象名称,语法和用户编写的代码片段自动进行检索,智能的为 ...
- Springboot AOP写操作日志 GET POST
pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- 3、组件注册-@ComponentScan-自动扫描组件&指定扫描规则
3.组件注册-@ComponentScan-自动扫描组件&指定扫描规则 3.1 xml方式 benas.xml 导入context命名空间 <?xml version="1.0 ...
- 016_linux驱动之_原子操作
1. 原子操作 原子操作指的是在执行过程中不会被别的代码路径所中断的操作. 常用原子操作函数举例: atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初始化为0 a ...
- 用chrome console实现自动化操作网页
因为chrome console只能访问当前页的上下文(以及chrome扩展的上下文),无法访问其他标签页面的上下文,所以局限性较大,仅适用于一些较简单的操作 经实践,可以在chrome的一个标签页的 ...
- @ControllerAdvice与@ControllerAdvice统一处理异常
https://blog.csdn.net/zzzgd_666/article/details/81544098(copy) 详细看此 所以结合上面我们可以知道,使用@ExceptionHandler ...
- mkfs/mk2fs/fsck/e2fsck/tune2fs/blkid
mkfs 格式化创建Linux文件系统的工具 centos 6 使用xfs文件系统 fsck 检测及修复文件系统的工具 当磁盘出现逻辑错误的时候,可以尝试修复. fsck -t ext2|ext3 / ...