.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 写入和查询)--学习笔记
2.5.3 MongoDB -- 写入和查询
- 写入
- 查询
- 查找操作符
- 逻辑操作符
- 其他
- 嵌套对象
- 数组
- 游标方法
写入
https://docs.mongodb.com/manual/tutorial/insert-documents/
- insertOne
- insertMany
db.questions.insert(
{
"_id":"003",
"title":"第三个问题",
"view":0,
"isDeleted":false,
"content":"第三个问题",
"status":"open",
"tags":["c#"],
"answers":[
{"content":"回答1"},
{"content":"回答2"},
{"content":"回答3"}
]
}
)
db.questions.insertMany(
[
{
"_id":"004",
"title":"第三个问题",
"view":0,
"isDeleted":false,
"content":"第三个问题",
"status":"open",
"tags":["c#"],
"answers":[
{"content":"回答1"},
{"content":"回答2"},
{"content":"回答3"}
]
},
{
"_id":"005",
"title":"第三个问题",
"view":0,
"isDeleted":false,
"content":"第三个问题",
"status":"open",
"tags":["c#"],
"answers":[
{"content":"回答1"},
{"content":"回答2"},
{"content":"回答3"}
]
}
]
)
查询
https://docs.mongodb.com/manual/reference/operator/query/
db.users.find(
{ age: { $gt: 18 } }, // 查询条件
{ name: 1, address: 1 } // 查询字段
).limit(5)
db.getCollection('questions').find({"title":"第三个问题"},{"title":1,"content":1})
db.getCollection('questions').find({},{"title":1,"content":1}).skip(1).limit(2)
查找操作符
| Name | Description |
|---|---|
| $eq | 等于 |
| $gt | 大于 |
| $gte | 大于等于 |
| $lt | 小于 |
| $lte | 小于等于 |
| $ne | 不等于 |
| $in | 存在于 |
| $nin | 不存在于:一般用于数组 |
// 大于等于
db.getCollection('questions').find({"view":{$gte: NumberInt(0)}})
// 存在于
db.getCollection('questions').find({"tags":{$in: ["c#"]}})
逻辑操作符
| Name | Description |
|---|---|
| $and | 满足多个条件 |
| $or | 满足多个条件中的一个 |
| $not | 不匹配,或者字段不存在 |
| $nor | 多个条件,一个都不满足 |
// 满足多个条件中的一个
db.getCollection('questions').find({$or:
[
{"tags":{$in: ["c#"]}},
{"view":{$gt:2}}
]
})
db.getCollection('questions').find({"view":{"$gt": 5}})
// 不匹配,或者字段不存在(取反)
db.getCollection('questions').find({"view": {$not: {"$gt": 5}}})
// 多个条件,一个都不满足
db.getCollection('questions').find({$nor: [{"view":{"$gt": 5}}]})
其他
| Name | Description |
|---|---|
| $exists | 存在某个字段 |
| $type | 字段的类型 |
// 存在某个字段则显示
db.getCollection('questions').find({"best": {$exists:1}})
// 不存在某个字段则显示
db.getCollection('questions').find({"best": {$exists:0}})
// 字段的类型,16代表32-byte integer
db.getCollection('questions').find({"view": {$type: 16}})
https://mongoing.com/docs/reference/bson-types.html
嵌套对象
db.getCollection('questions').find({"best.content":{$eq: "最好的答案"}})
数组
| Name | Description |
|---|---|
| $all | 所有元素匹配,匹配简单类型数组 |
| $elemMatch | 用于匹配 object 数组 |
| $size | 长度条件 |
db.getCollection('questions').find({"tags": {$in: ["c#"]}})
db.getCollection('questions').find({"tags": {$nin: ["c#"]}})
// 都必须包含
db.getCollection('questions').find({"tags": {$all: ["c#", "asp.net core"]}})
// 大小为2
db.getCollection('questions').find
// 包含 回答1 的数组
db.getCollection('questions').find({"answers": {$elemMatch: {"content": "回答1"}}})
db.getCollection('questions').find({"answers": {$elemMatch: {"content": {$gte: "回答1"}}}})
游标方法
只在 mongo shell 中有效,其他语言版本 sdk 无效
- skip
- limit
- count
- pretty 美化

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 写入和查询)--学习笔记的更多相关文章
- .NET 云原生架构师训练营(权限系统 代码实现 Store.EntityFramework)--学习笔记
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Secu ...
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB API实现)--学习笔记
2.5.7 MongoDB -- API实现 问题查询单个实现 问题查询列表实现 问题跨集合查询实现 问题创建实现 问题更新实现 问题回答实现 问题评论实现 问题投票实现 回答实现 QuestionC ...
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB API重构)--学习笔记
2.5.8 MongoDB -- API重构 Lighter.Domain Lighter.Application.Contract Lighter.Application LighterApi Li ...
- .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, F ...
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 问答系统)--学习笔记
2.5.6 MongoDB -- 问答系统 MongoDB 数据库设计 API 实现概述 MongoDB 数据库设计 设计优化 内嵌(mongo)还是引用(mysql) 数据一致性 范式:将数据分散到 ...
- .NET 云原生架构师训练营(建立系统观)--学习笔记
目录 目标 ASP .NET Core 什么是系统 什么是系统思维 系统分解 什么是复杂系统 作业 目标 通过整体定义去认识系统 通过分解去简化对系统的认识 ASP .NET Core ASP .NE ...
- .NET 云原生架构师训练营(权限系统 RGCA 架构设计)--学习笔记
目录 项目核心内容 实战目标 RGCA 四步架构法 项目核心内容 无代码埋点实现对所有 API Action 访问控制管理 对 EF Core 实体新增.删除.字段级读写控制管理 与 Identity ...
- .NET 云原生架构师训练营(模块二 基础巩固 敏捷开发)--学习笔记
2.7.1 敏捷开发 敏捷介绍 敏捷的起源 敏捷软件开发宣言 敏捷开发十二原则 生命周期对比 敏捷开发的特点 敏捷的发展 敏捷的核心 敏捷的起源 2001年,17个老头子在一起一边滑雪,一边讨论工作, ...
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 介绍和基础)--学习笔记
2.5.1 MongoDB -- 介绍 mysql vs mongo 快速开始 mysql vs mongo 对比 mysql mongo 数据存储 table 二维表结构,需要预先定义结构 json ...
随机推荐
- hi-nginx-java的无配置路由配置
hi-nginx-java既可以通过实现hi.servlet抽象来像Flask那样快速配置路由,例如: 1 hi.route r = hi.route.get_instance(); 2 r.get( ...
- 第15.43节、PyQt输入部件:QAbstractSpinBox派生类QSpinBox、 QDoubleSpinBox、QDateTimeEdit、QDateEdit和QTimeEdit功能简介
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer输入部件中的Spin B ...
- React跳转路由传参3种方法和区别
1.params传参 路由表配置:参数地址栏显示 路由页面:<Route path='/demo/:id' component={Demo}></Route> //配置 /:i ...
- 网络QoS的平衡之道——音视频弱网对抗策略介绍
作者:网易智企云信资深音视频引擎开发工程师 王兴鹤 随着AI和5G的到来,音视频应用将变得越来越广泛,人们对音视频的品质需求也越来越高,视频分辨率已经从高清发展为超高清.VR,视频帧率也已出现60fp ...
- AtCoder Regular Contest 109
Contest Link 为什么还没有 Official Editorial 啊--哦,原来是日文题解,那没事了. A - Hands 有两幢 100 层的楼房 \(A,B\) ,将地面所在的楼层称为 ...
- 题解-Happy New Year
题解-Happy New Year Happy New Year 给定 \(n\),\(m\) 和 \(k\).有一个序列 \(a\{m\}\) 初始值为 \(0\).有 \(n\) 种操作,每种可以 ...
- Docker(八): 安装ELK
服务部署发展 传统架构单应用部署 应用程序部署在单节点中,日志资源同样输出到这台单节点物理机的存储介质中. 微服务架构服务部署 以分布式,集群的方式部署应用,应用分别部署在不同的物理机中,日志分别输出 ...
- v-text、v-html、v-pre
v-text 用于将数据填充到标签中,作用于插值表达式类似,但是相对于直接插值是没有闪动问题的 v-html 用于将HTML片段填充到标签中,但是可能有安全问题(易被跨域脚本攻击[XSS攻击]) v- ...
- springmvc中ModelAttribute注解应用在参数中
可以用@ModelAttribute来注解方法参数或方法.带@ModelAttribute创建的参数对象会被添加到Model对象中.注解在参数上时,可以从Form表单或URL参数中获取参数并绑定到mo ...
- Eureka 集群Demo
由于自己遇到了一些eureka集群疑问,就自己搭了一个集群demo进行测试.测试中通过两个eureka相互注册形成集群,两个服务提供者向eureka中注册服务,两个服务消费者通过feign进行服务调用 ...