MongoDB基本操作(包括插入、修改、子节点排序等)
一、基本操作
1.新增文章
db.article.insert({title:"今天天气很好",content:"我们一起去春游",_id:1})
2.新增一条评论
db.article.update({_id:1},{"$set":{comments:[{user:"duanjt",time:new Date("2019-01-30")}]}})
说明:$set表示替换comments节点的内容
3.再增加四条评论
db.article.update({_id:1},{"$addToSet":{comments:{"$each":[{user:"zhuzhu",time:new Date("2019-01-31")}]}}});
db.article.update({_id:1},{"$addToSet":{comments:{"$each":
[
{user:"lisi",time:new Date("2019-01-20")},
{user:"wangwu",time:new Date("2019-01-11")},
{user:"taoge",time:new Date("2019-01-12")}
]
}}});
db.article.update({_id:1},{"$push":{comments:{"$each":[{user:"chaoling",time:new Date("2019-01-31")}]}}});
说明:$addToSet表示在节点comments中增加内容。而$each表示将后面指定的数组一个一个插入到comments节点里面。
在这里addToSet和push感觉作用是一样的。
4.查询前2条评论
db.article.find({_id:1},{"comments":{"$slice":[0,2]}});
5.将评论里面用户是“wangwu”的修改为“王五”
db.article.update(
{"_id":1,"comments.user":"wangwu"},
{"$set":{"comments.$.user":"王五"}}
)
注意:comments.$.user中的$是一个占位,表示当前匹配的数据行
6.将comments里面的内容按时间或名称排序
db.article.update({_id:1},{"$push":{comments:{"$each":[],"$sort":{"time":1}}}});
db.article.update({_id:1},{"$push":{comments:{"$each":[],"$sort":{"user":1}}}});
说明:由于MongoDB不提供针对子节点的直接排序方法,所以我们只能通过变通的方式,插入一个空数组,然后再排序。排序完了之后再通过第四步的方法获取数据。
二、关于push和addToSet的区别
db.user.insert({_id:1,name:"段江涛",likes:["学习","劳动"]}); //插入数据,爱好是学习和劳动
db.user.update({_id:1},{"$push":{"likes":{"$each":["学习"]}}}); //通过push增加一个“学习”的爱好,能新增成功
db.user.update({_id:1},{"$addToSet":{"likes":{"$each":["学习"]}}}); //通过addToSet增加一个“学习”的爱好,操作不报错,但是不会新增成功。
结论:push直接插入,而addToSet会自动排除重复的数据。此外push支持$sort $position $slice,可以控制插入元素的位置、排序和限制元素数量
MongoDB基本操作(包括插入、修改、子节点排序等)的更多相关文章
- elementui树表修改子节点不能实时更新的解决办法
在使用ElementUI提供的树表(el-table)的时候发现,如果手动通过JS修改了某个节点的children中的一条记录(子节点)的话,并不会自动刷新. 简单分析了一下,原因大概是因为VUE的数 ...
- 关于 Unity UGUI 中修改 Mask 组件下 Image 等子节点组件的材质无效的问题
前几天同事做了一个效果,希望在原本使用了遮罩组件 Mask 的技能图标(让技能图标变成圆形)上在添加一个置灰的功能,但问题来了:因为是动态根据游戏中玩家的条件才动态置灰,以修改 Mask 下子节点 I ...
- js获取子节点和修改input的文本框内容
js获取子节点和修改input的文本框内容 js获取子节点: $("#"+defaultPVItemId).children().eq(3); //获取某个选择器下的第四个子节点 ...
- contents() 查找匹配元素内部所有的子节点(包括文本节点)。如果元素是一个iframe,则查找文档内容
contents() V1.2概述 查找匹配元素内部所有的子节点(包括文本节点).如果元素是一个iframe,则查找文档内容 示例 描述:大理石平台检定规程 查找所有文本节点并加粗 HTML 代码 ...
- DOM操作插入新的子节点
appendChid.insertBefore首先这两个方法都是添加子节点. append(追加),appendChid:给父节点的子节点末尾添加子节点. insertBefore(newNode, ...
- 红黑树之 原理和算法详细介绍(阿里面试-treemap使用了红黑树) 红黑树的时间复杂度是O(lgn) 高度<=2log(n+1)1、X节点左旋-将X右边的子节点变成 父节点 2、X节点右旋-将X左边的子节点变成父节点
红黑树插入删除 具体参考:红黑树原理以及插入.删除算法 附图例说明 (阿里的高德一直追着问) 或者插入的情况参考:红黑树原理以及插入.删除算法 附图例说明 红黑树与AVL树 红黑树 的时间复杂度 ...
- MongoDB【第三篇】MongoDB基本操作
MongoDB的基本操作包括文档的创建.删除.和更新 文档插入 1.插入 #查看当前都有哪些数据库 > show dbs; local 0.000GB tim 0.000GB #使用 tim数据 ...
- MongoDB 基本操作和聚合操作
一 . MongoDB 基本操作 基本操作可以简单分为查询.插入.更新.删除. 1 文档查询 作用 MySQL SQL MongoDB 所有记录 SELECT * FROM users; db ...
- 【MongoDB详细使用教程】二、MongoDB基本操作
目录 数据类型 数据库操作 集合操作 数据操作 增 查 改 修改整行 修改指定字段的值 删 数据类型 MongoDB常见类型 说明 Object ID 文档ID String 字符串,最常用,必须是有 ...
随机推荐
- TCP/IP HTPP
TCP/IP:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协 ...
- Recurrent NN vs Recursive NN
https://www.bilibili.com/video/av9770302/?p=8 李宏毅深度学习 图很清楚的反映出两者的不同 Recurrent可以看成Recursive的特殊形式,即以特定 ...
- 指数型生成函数(EGF)学习笔记
之前,我们学习过如何使用生成函数来做一些组合问题(比如背包问题),但是它面对排列问题(有标号)的时候就束手无策了. 究其原因,是因为排列问题的递推式有一些系数(这个待会就知道了),所以我们可以修改一下 ...
- MAVEN day04 SSH之分模块开发
一.创建父工程 1.选择>>"Maven Project"创建Maven工程.并且选择Packaging为 POM. 创建父工程主要是让子工程区继承父工程,减少冗余,多 ...
- 2、jeecg 笔记之 t:dictSelect 或 t:dgCol 自定义字典
1.需求 先说一下需求场景吧,我们知道 jeecg 中提供了下拉,其中包含两种使用场景: 一种是直接通过 t:dictSelect 使用,再就是 t:dgCol 用于表头的列表工具条标签: 总之就是 ...
- python_json序列化和反序列化
序列化 import json dic = {'} print(json.dumps(dic)) 反序列化;json.loads() dic = {'} print(json.dumps(dic)) ...
- asp.net 导出excel--NPOI
1.使用OLEDB导出Excel ,这种方式有点慢,慎用 /// <summary> /// 使用OLEDB导出Excel /// </summary> /// <par ...
- DevOps“五宗罪”,这样向DevOps过渡注定会失败
云计算提供的速度响应.敏捷性和规模效应,契合了如今不断变化的数字商业环境.企业基于最新的IT技术,重构IT架构,加速产品创新和服务交付的速度,从而提高运营效率和市场占有. 不过,企业IT管理者在利用云 ...
- 基于注解的Spring事务配置
spring采用@Transactional注解进行事务申明,@Transactional既可以在方法上申明,也可以在类上申明,方法申明优先于类申明. 1.pom配置 包括spring核心包引入以及s ...
- vue 在浏览器控制台怎么调试 谷歌插件vue Devtools
vue 在浏览器控制台怎么调试 谷歌插件vue Devtools 问题: vuejs里面的变量,怎么用浏览器的console查看? 例如,想在chrome里用console.log查看变量$data, ...