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 字符串,最常用,必须是有 ...
随机推荐
- 线段树 || BZOJ1756: Vijos1083 小白逛公园 || P4513 小白逛公园
题面:小白逛公园 题解: 对于线段树的每个节点除了普通线段树该维护的东西以外,额外维护lsum(与左端点相连的最大连续区间和).rsum(同理)和sum……就行了 代码: #include<cs ...
- linux 逆向映射机制浅析
2017-05-20 聚会回来一如既往的看了会羽毛球比赛,然后想到前几天和朋友讨论的逆向映射的问题,还是简要总结下,免得以后再忘记了!可是当我添加时间……这就有点尴尬了……520还在写技术博客…… 闲 ...
- VB调用C# dll
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319注册regasm myTest.dll /tlb:myTest.tlb
- maven build resources
1.在我用springboot+mytatis时,生成完mapper后,然后访问网站总是报错 错误信息: Servlet.service() for servlet [dispatcherServle ...
- vue -about
j基于webpack4 搭建vue 环境:https://juejin.im/post/5bc30d5fe51d450ea1328877
- 3.Python3变量与基本数据类型
3.1保留字和标识符 3.1.1保留字 保留字是Python语言中已经被赋予特定意义的一些单词,开发程序时不可以把保留字作为变量.函数.类.模块和其他对象的名称来使用.保留字如下: 3.1.2标识符 ...
- 线程同步——lock锁
线程同步即解决线程安全问题的第三种方式——使用lock锁 代码实现: 其中,ReentrantLock是lock接口的实现类,这边是使用多态创建,访问成员方法时,编译看左,运行看右: Reentran ...
- 用 python 生成一个简单的词云图
import jieba from nltk import * from wordcloud import WordCloud import matplotlib.pyplot as plt word ...
- Python在金融量开源项目列表
Python也已经在金融量化投资领域占据了重要位置,开源项目列表:
- 在vue项目中 如何定义全局变量 全局函数
如题,在项目中,经常有些函数和变量是需要复用,比如说网站服务器地址,从后台拿到的:用户的登录token,用户的地址信息等,这时候就需要设置一波全局变量和全局函数 定义全局变量 原理: 设置一个专用的的 ...