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 ...
随机推荐
- pyqt pyside qcombobox disable wheel scrolling
pyqt pyside qcombobox disable wheel scrolling import sys from PyQt5 import QtCore, QtWidgets import ...
- FFmpeg常用命令学习笔记(七)直播相关命令
直播相关命令 主要涉及到直播中的推流和拉流 1.直播推流 ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName -re: ...
- 再论i++ ++i
#include <stdio.h> int main(void) { char acData[5] ={'A','B','C','D','E'}; char *pcData = NULL ...
- PHP---反射--继续剖析
首先定义一个类 <?phpInterface trainning{ public function exec();}class mma implements trainning{ public ...
- python自动华 (十五)
Python自动化 [第十五篇]:CSS.JavaScript 和 Dom介绍 本节内容 CSS javascript dom CSS position标签 fixed: 固定在页面的某个位置 rel ...
- Java 加解密算法
目前加密算法中分两种 一种是对称加密,一种是非对称加密 那么什么是对称加密呢?对称加密可以理解为加密和解密用的是一个钥匙. 而非对称加密,加锁用的是一个钥匙,而解锁用的是另外一个钥匙. 目前市面上用的 ...
- 让JPA的Query查询接口返回Map对象
在JPA 2.0 中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句. 但当我们查询结果没有对应实体类时,query.getResultList() ...
- String.getBytes()方法中的中文编码问题(转)
String的getBytes()方法是得到一个系统默认的编码格式的字节数组getBytes("utf-8") 得到一个UTF-8格式的字节数组 把String转换成bytes, ...
- npm传参技巧
博主今天遇到一个问题,使用vue-cli-serve,想要用shelljs来执行vue-cli-serve,动态给它传“--port xxxx"但是发现”--port“怎么传都穿不进去,后面 ...
- 十七、程序包管理之yum和编译安装
YUM Redhat二次发行版 Yellow Dog Linux,上使用的yum(Yellowdog Update Modifier),由yellow dog 研发 yum命令的工作原理 1.接收用户 ...