MongoDB入门笔记-1-数据类型、插入、更新
-
基本概念
MongoDB由Databases组成,可通过use切换不同的DB。
Databases由Collections(类比mysql的Table)组成。
Collection由Documents(类比mysql的row)组成。
Document由Fields(类比mysql的column)组成。 -
基本数据类型
概念上,MongoDB的文档类似于Javascript中的对象,类似于JSON- null
表示空值或者不存在的字段 - 布尔类型
true或者false - 数值
默认采用64位浮点型
整数可以采用NumberInt(4字节带符号整型)或者NumberLong(8字节带符号整型):
{"x": NumberInt("5")}
{"x": NumberLong("5")}
- 字符串
- 日期
日期被存储为自新纪元以来的毫秒数,不存储时区。 - 正则表达式
查询时,使用正则作为限定条件
{"x": /abc123/i}
- 内嵌文档
文档嵌套其他文档
{"x": {"y": "abc"}}
- 对象id
对象id是一个12字节的ID,是文档的唯一标识
{"x": ObjectId()}
- null
- 基本操作
-
插入
db.foo.insert() :插入
db.foo.insert({"name": "abc", "age": 25})
db.foo.batchInsert() :批量插入
db.foo.batchInsert([{"name": "abc", "age": 12}, {"name": "edf", "age": 23}])
-
删除
db.foo.remove() :不加参数会删除所有的文档,但是不会删除foo这个collection
db.foo.remove({"name": "abc"})
db.foo.drop() :删除集合 -
更新
db.foo.update({"name": "abc"}, {"name": "hihi"})
不同于mysql,mongo会将后者完全替代第一个参数查出来的文档
如果想只更新某一些值:- 先查出这个文档,修改其中的值,然后用update替换
- 使用修改器,set
db.foo.update({"name": "abc"}, {"$set": {"name": "edf"}})
db.foo.update({"name": "abc", {"$inc": {"age": 5}}})
-
upsert
第三个参数加 true,可以在不存在的时候,插入这个文档
db.foo.update({"name": "abc"}, {"name":"hihi", "age":12}, true)
-
其他修改器
- $push
如果数组存在,则向数组末尾添加一个元素,不存在则先创建一个新的
- $push
-
更新多个文档
将update的第四个参数设为true,可以更新多个文档
-
数组。
mongodb db.blog.posts.update({ "title": "A new blog" }, { "$push": {"comments": {"name": "hello", "email": "hello@gmail.com", "comments": ""Good post.}} })
2. $addToSet
可以向数据集添加新的元素,如果已经存在,则不会重复插入
```
db.blog.user.insert({
"name": "abc",
"email": ["abc@163.com"]
})
db.blog.user.update({"name": "abc"},
{"$addToSet": {"email": "abc@hotmail.com"}
})
```
3. $pop
从数组中取出元素,1表示从尾删除,-1从头删除
```
db.blog.user.update({"name":"nannan"}, {"$pop":{"email": -1}})
```
4. $pull
可以将数组中所有相等的值取出
![image.png](https://img.haomeiwen.com/i2434402/2652136be372c239.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image.png](https://img.haomeiwen.com/i2434402/0f5ebaa4b0e82778.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)