把 MongoDB 的查询放在最後面,其实你也已经学完了,但我还是快速带过基本的范例。
field == TargetString
的文件db.collection.find({"field": "TargetString"})
field == str1 OR field == str2
的文件db.collection.find({"field": { $in: ["str1", "str2"] }})
5 <= field < 8
的文件db.collection.find({"field": { $gte: 5, $lt: 8 }})
field < 5 OR field >= 7
的文件db.collection.find({ $or:[{ "field": {$lt:5}}, {"field": {$gte:7}} ]})}})
还是要来一下 MongoDB Find Pattern
db.collection.find(query, projection)
上面的范例都还是 query 的范畴,也代表 projection 是可以省略的。
Projection 本身就像是要查询的栏位一样:
1
代表 true,查询0
代表 false,呼略此栏位因此想查出 field_a
,但不要 field_b
就像这样:
db.collection.find({}, { field_a:1, field_b:0 })
再提醒的是 _id
预设就是会被查询出来,如果也不想要的话,需要特别指定该栏位为 0
Embedded document 查询其实也非常的简单,一个 .
就能讲完。
首先我们准备一个范例:
db.movie.insertMany([
{
name: 'movie1',
publishYear: 2020,
producer: {
company: "Disnai",
registrant: "Water Disnai"
}
},
{
name: 'movie2',
publishYear: 2019,
producer: {
company: "Larvem",
registrant: "Natt Marvel"
}
}
])
假设我们要查公司是 Disnai 的电影只需要使用 .
连接 nested document 栏位即可。
db.movie.find({ 'producer.company': 'Disnai' })
这边跟之前的 collection 略微不同,需要使用单引号''
或双引号""
将整个栏位包住。
方法还是一样。
db.movie.find({ 'level1.level2.level3': 'Gotcha' })
实际的使用情境上,我们很常会需要确认某个栏位是否存在,这时候要如何下查询语法?
要使用的 operator 是 $exists
,直接上范例!
db.movie.find({ NotExistField: { $exists: true }})
这个范例就是查询存在这个栏NotExistField
的文件,结果当然是没有任何文件有此栏位。若 exists 设定为 false,那每一笔资料都符合、会被查出来了喔。
Null 是 Bson 支援的型态之一,不是没有此栏位,是此栏位是 null。那麽我们要如何查询 null
栏位呢?
首先先来准备三笔资料
db.testNull.insertMany([
{'field': 1},
{'field': 2},
{'field': null},
])
查询语法比想像中简单,就是 field:null
film> db.testNull.find({ field:null })
[ { _id: ObjectId("6136337d924cfb987f3ce27c"), field: null } ]
film>
打铁趁热,我们也赶紧看看如何判断栏位的类型,某些情况会有不确定性,就需要单独查询这个栏位是什麽类型。
使用的 operator 为 $type
。
film> db.testNull.find({ field : { $type: 10 } })
[ { _id: ObjectId("6136337d924cfb987f3ce27c"), field: null } ]
为什麽是 10
呢?这就要回到刚开始介绍的 BSON type 类型,这边直接提供官网 供各位参考,其中 Number
栏位就是这里的数字。
MongoDB 比较基础的部分在前几天总算结束了,後面的内容会稍微深入且份量比较重喔~
本系列文章会同步发表於我个人的部落格 Pie Note
一日客语:中文:青色 客语:抢厶ㄟ ˋ 继续学习原型吧~ 学习内容: 1.Object.getPro...
因为疫情的关系 体会到很多事情都要持之以恒 在突然被打乱的生活节奏中 要怎麽找回另一个习惯的步调 ...
前言 该系列是为了让看过Vue官方文件或学过Vue但是却不知道怎麽下手去重构现在有的网站而去规画的系...
在推动团队开发系统的改善过程中,曾经遇到一个难题: 要如何将合作的流畅度、资讯的透明度以及团队成员的...
前情提要 昨天好好的复习了一下动画的特性之後 今天就来看看怎麽做这颗按钮吧! 图源:https://...