1.入门

1.简介

①.名词和sql的对应关系: 文档(用面向对象的方式对待数据,没有固定的模式schema)/行 集合/表 数据库/数据库 实例/实例
②.mongo优势:高效写/高集群可扩展性(可以使用多台性能低的设备)/保留了sql基本功能(索引\聚合) conn.1.⑥
③.sql优势:对多行事务的支持/复杂查询(联表查询)

2.支持的数据类型
BSON Type编号 名称 Shell写法 用途说明
1 double x: 3.14 64位浮点数(默认JS数字类型)
2 string “abc” UTF-8字符串
3 object { x: 1 } 内嵌文档
4 array [1,2,3] 数组 比如说一个人有多个手机号
5 binary BinData(0, “…”) 二进制数据 图片
7 ObjectId ObjectId(“…”) MongoDB 默认主键类型
8 bool true/false 布尔值
9 date ISODate(“…”) 日期时间
10 null null 空值
11 regex /pattern/i 正则表达式
16 int32 NumberInt(123) 32 位整数
18 int64 NumberLong(1234567890) 64 位整数
19 Decimal128 NumberDecimal(“123.456”) 高精度浮点(常用于金融)
127 maxKey MaxKey() 用于排序比较最大值
255 minKey MinKey() 用于排序比较最小值

①._id: 在集合范围内唯一,[0,3]:时间戳(秒) [4,6]:机器标识(host hash) [7,8]进程ID [7,11]:计数器(秒级自增)
②.数值: Mongo Shell是基于JavaScript运行的,如果用db.test.insert({x:2^31}),x超出int32的范围则会被存入为double
  db.test.insert({x:NumberLong(“2^31”)}) 可以指定为int64存储
③.数组: 如果对数据类型是数组的字段创建索引,mongo是对数组里面的每一个元素创建索引
④.内嵌文档: 和mysql的外键(在mongo叫拆集合)处理的业务相同,内嵌文档的优势:更加的紧凑 缺点:反范式(冗余)

2.增删改

1.增
db.users.insert({"name": "baz"})     # 驱动程序会将数据转换成BSON,数据库校验BSON内是否有_id且文档大小是否超过4MB
2.删
db.users.remove()                   # 删除集合内所有文档 不会删除集合和索引
db.drop_collection("users")         # 删除集合
3.改

①.update

var joe = db.user.findOne({"name":"joe"})
joe.relationships = {"friends":3,"enemies":3}  # 可以是不同数据类型
db.users.update({"name":"joe"}, joe)

②.修改器

$set       # 更新文档中的某个字段,如果不存在则创建
$inc       # 和redis的incrby效果一致
$push      # 往文档的数组字段中加入一个元素
$ne        # 判断数组中是否有某个元素
$addToset  # 避免重复,如果数组里面有该元素则不插入
$each      # 和$push $addToSet配合使用,单次插入多个元素

③.如果数组里面没有该email则插入 使用$ne

db.users.update(
  {"emails": {"$ne": "newemail@example.com"}},   # 不建议使用,非线程安全
  {$push: {"emails": "newemail@example.com"}}
)

④.如果数组里面没有该email则插入 使用$addToSet

db.users.update(
  { _id: ObjectId("4b2d75476cc613d5ee930164") },
  {
    $addToSet: {
      email: "newemail@example.com"
    }
  }
)

⑤.如果数组里面没有该email s则插入 使用$addToSet $each

db.users.update(
  {_id: ObjectId("4b2d75476cc6130d5ee930164")},
  {
    $addToSet: {
      "emails": {$each: ["newemail@example.com", "another@example.com"]}
    }
  }
)
文档更新时间: 2026-03-31 19:26   作者:morninglu