MongoDB基础操作之CRUD:Create

本文深入介绍了MongoDB中创建文档的基础操作,包括文档主键、ObjectID的详细特性,以及如何在Mongo Shell中实践创建单个和多个文档。文中还探讨了复合主键的概念,强调了主键的唯一性和重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:创建MongoDB文档的简单介绍

文档主键_id

  • 每个MongoDB文档必备的字段
  • 文档主键具有唯一性
  • 文档主键支持所有数据类型(数组除外
  • 文档主键可以是复合主键:例如可以用其他文档来做文档主键

对象主键ObjectId

  • 默认的文档主键
  • 客户端驱动程序快速生成的12字id
  • 前4个字节为创建时间,精确到秒,除多文档同时被创建和各客户端的系统时间不同这两种情况之外,可以借此区分创建的先后顺序

创建文档

  • db.collection.insert()
  • db.collection.save()
  • 创建多个文档

二:使用Mongo Shell进行实践

创建单个文档:db.collection.insertOne()

## 使用test数据库(不存在则创建)
use test

## 查看数据库中的集合
show collections

## 开始创建第一个文档
## 参数说明:
## collection:文档将要写入的集合
## 第一个document:想要写入的文档本身
## 第二个document:文档本次创建的的安全写级别,不提供则使用默认的
db.<collection>.insertOne(
	<document>,
	{
		writeConcern:<document>	
	}
)

db.accounts.insertOne(
	{
		_id: "account1",
		name: "alice",
		balance: 100,
	}
)

## 处理抛出的错误
try {
		db.accounts.insertOne(
		{
			_id: "account1",
			name: "alice",
			balance: 100,
		}
	)
} catch(e) {
	print(e)
}

## 自动生成_id字段
## 省略该字段就会自动创建
db.accounts.insertOne(
 	{
 		name:"bob",
		balance:200,
  	}
)

创建多个文档:db.collection.insertMany()

db.<collection>.insertMany(
	[<document1>,<document2>,...],
	{
		writeConcern:<document>,
		ordered:<boolean>,
	}
)

try {
	db.accounts.insertMany(
		[{
			name:"Tom",
			balance:300},
		{
			name:"Joke",
			balance:50}],
		{
			ordered:false}
	)
} catch(e) {
	print(e)
}

创建单个或多个文档:db.<collention>.insert()

db.<collection>.insert(
	<document or arrary of documents>,
	{
		writeConcern:<document>,
		ordered:<boolean>
	}
)

db.collection.insertOne()db.collection.insertMany()db.collection.insert()之间的区别:

  • 三者的返回结果不同
  • 前两者不支持db.collection.explain()指令,insert支持

另一个创建文档的命令:db.collection.save()

## 当创建一个新的文档的时候,就是调用db.collection.insert
db.<collection>.save(
	<document>,
	{
		writeConcern:<document>
	}
)

三:文档主键_id的深入探讨

默认的文档主键:对象主键(ObjectId)

  • 生成一个新的对象主键:ObjectId()
  • 提取ObjectId的创建时间:
    ObjectId("5df84f4c4c21c96be13ee5ab").getTimestamp()
    

复合主键

  • 使用一个文档作为另一个文档的文档主键
  • 例如:
    db.accounts.insert(
    	{
    		_id:{accountNo:"001",type:"savings"},
    		name:"Joke",
    		balance:600,
    	}
    )
    
  • 需要注意的是:复合主键中的文档主键也要确保唯一性,作为文档主键的文档如果字段顺序不同,哪怕内容一样,也是不一样的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值