MongoDB 4.X CRUD基本操作
本文总结了MongoDB 4.X在mongo shell客户端涉及的对文档一些基本的增删改查操作,即CRUD操作。主要结合了自己平时使用MongoDB的操作命令,更详细的命令可以参考官方文档: https://docs.mongodb.com/manual/crud/ 。
创建(Create Operations)
创建(Create Operations)也叫插入操作,当集合不存在时,插入操作同时也会创建集合。MongoDB提供以下几种插入文档方法:
- db.collection.insert():在指定集合中插入单个或多个文档。
- db.collection.insertOne():在指定集合中插入单个文档(版本3.2新增)。
- db.collection.insertMany():在指定集合中插入多个文档(版本3.2新增)。
db.collection.insert()
在平时的使用当中,db.collection.insert()是我用得最多的文档插入方式,具体的语法格式如下:
db.collection.insert(
<document or array of documents>,
{
writeConcern: <document>,
ordered: <boolean>
}
)
参数说明:
- document:指定一个或多个文档;
- writeConcern:文档写入确认级别(可选),关于读写策略确认级别,以后再进行讨论;
- ordered:指定文档是否按顺序插入(可选),默认为true;
- 当指定为true时,插入多个文档时将文档排序保存在一个数组中进行插入,如果其中有一个文档插入失败,则会导致数组中余下的文档不进行插入操作;
- 当指定为false时,插入多个文档时将文档不进行排序保存在一个数组中进行插入,如果其中有一个文档插入失败,则不影响数组中余下的文档进行插入操作。
如果插入的文档当中没有指定_id
字段,则MongoDB会自动为文档生成具有唯一ObjectId
值的字段_id
。
使用示例:
// 没有指定_id字段的插入单个文档
db.products.insert( { item: "card", qty: 15 } );
// 指定_id字段的插入单个文档
db.products.insert( { _id: 10, item: "box", qty: 20 } );
// 插入多个文档,不进行排序,多个文档包含在数组[]中
db.products.insert(
[
{ _id: 11, item: "pencil", qty: 50, type: "no.2" },
{ item: "pen", qty: 20 },
{ item: "eraser", qty: 25 }
]
);
// 插入多个文档,并进行排序
db.products.insert(
[
{ _id: 20, item: "lamp", qty: 50, type: "desk" },
{ _id: 21, item: "lamp", qty: 20, type: "floor" },
{ _id: 22, item: "bulk", qty: 100 }
],
{ ordered: false }
);
db.collection.insertOne()
语法格式如下:
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)
参数说明:
参考db.collection.insert()的参数说明。
使用示例:
// 单行插入文档,关于_id字段指定与否也与db.collection.insert()一致
db.products.insertOne( { item: "card", qty: 15 } );
db.collection.insertMany()
语法格式如下:
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)
参数说明:
参考db.collection.insert()的参数说明。
使用示例:
参考db.collection.insert()的参数说明。
关于返回确认信息
db.collection.insert()在插入文档成功之后返回的信息相对较为简洁:
db.products.insert( { item: "card", qty: 15 } );
WriteResult({ "nInserted" : 1, "writeConcernError" : [ ] })
db.collection.insertOne()和db.collection.insertMany()返回的信息较为详细:
db.products.insertOne( { item: "card", qty: 15 } );
{
"acknowledged": true,
"insertedId": ObjectId("5eccbd214139000074003be8")
}
db.products.insertMany( [
{ _id: 10, item: "large box", qty: 20 },
{ _id: 11, item: "small box", qty: 55 },
{ _id: 12, item: "medium box", qty: 30 }
] );
{
"acknowledged": true,
"insertedIds": [
10,
11,
12
]
}
查询(Read Operations)
查询(Read Operations)读操作,是对集合中已存在的文档进行查询,即对应关系型数据库当中的select
操作,比如MySQL,MongoDB提供以下几种主要查询文档方法:
- db.collection.find():查询指定集合中满足条件的一个或多个文档和视图;
- db.collection.findOne():查询指定集合中满足条件的第一个文档,并以格式化方式展现,通过
pretty()
方法。
来自官方文档的测试数据:
db.inventory.insertMany([
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);
db.collection.find()
db.collection.find()可以说是使用频率最高的方法了,可以用来查询数据库集合当中的文档。
语法格式如下:
db.collection.find(<query>, <projection>)
- query:查询表达式;
- projection:指定查询结果集中需要显示的字段。
- Col_name:1|true 代表显示该字段;
- Col_name:0 | false 代表不显示该字段。
_id
字段是默认显示的,如果不想显示,则显式指定{"_id" : 0}
。
查询所有文档:
db.inventory.find()
或
db.inventory.find({})
db.collection.findOne()
db.collection.findOne()方法显示符合条件查询的第一条文档,接受的参数与db.collection.find()方法一致。
条件查询操作符
通常对文档的查询,是需要带条件的,而很少使用到不带条件的全文档检索,以下总结了几种常使用的查询操作符:
比较操作符
比较操作符涉及的操作如下表所示:
名称 | 说明 |
---|---|
$eq | 与指定值相等 |
$gt | 大于指定的值 |
$gte | 大于或等于指定的值 |
$in | 指定的值在数组中 |
$lt | 小于指定的值 |
$lte | 小于或等于指定的值 |
$ne | 所有不等于指定的值 |
$nin | 指定的值不在数组中 |
使用示例:
// $eq:等值查询 SQL: SELECT * FROM inventory WHERE status = "D";
db.inventory.find( { status: "D" } )
// $ne 同$eq
// $gt:范围查询(以大于为例) SQL: SELECT * FROM inventory WHERE qty > 30;
db.inventory.find( { qty: { $gt: 30 } } )
// $gte、$lt、$lte 同$gt
// $in:或查询,可使用or代替 SQL: SELECT * FROM inventory WHERE status in ("A", "D")
db.inventory.find( { status: { $in: [ "A", "D" ] } } )
// $nin 同$in
逻辑操作符
逻辑操作符涉及的操作如下表所示:
名称 | 说明 |
---|---|
$and | 指定查询同时满足多个条件查询子句 |
$not | 指定查询不满足条件查询子句 |
$nor | 指定查询无法满足多个条件查询子句 |
$or | 指定查询满足其中某个条件查询子句 |
使用示例:
// $and: 逻辑与查询 SQL: SELECT * FROM inventory WHERE status = "A" AND qty < 30;
db.inventory.find( { $and: [ { status: { $eq: "A" }, qty: { $lt: 30 } } ] } )
// $not: 不符合查询 SQL: SELECT * FROM inventory WHERE status <> "A";
db.inventory.find( { status: { $not: { $eq: "A" } } } )
/*
$nor: 无法同时满足多个条件查询,字段不存在时也符合 SQL: SELECT * FROM inventory WHERE status <> "A" AND qty > 30;
符合以下条件之一都会出现在结果集中:
1.文档包含status和qty字段并且符合条件;
2.文档包含status字段并且符合条件,不包含qty字段;
3.文档不包含status字段,包含qty字段并且符合条件;
4.文档不包含status字段和qty字段。
*/
db.inventory.find( { $nor: [ { status: { $eq: "A" } }, { qty: { $lt: 30 } } ] } )
// $or: 逻辑或查询 SQL: SELECT * FROM inventory WHERE status = "A" OR qty < 30;
db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )
元素操作符
元素操作符主要涉及的操作如下表所示:
名称 | 说明 |
---|---|
$exists | 指定查询文档是否有对应的字段 |
$type | 指定查询文档的某个字段是否是对应类型 |
使用示例:
// $exists: 是否存在指定字段查询
db.inventory.find( { price: { $exists: true } } )
// $type: 字段是否是指定类型查询
db.inventory.find( { "qty": { $type: "double" } } )
评估操作符
评估操作符主要涉及的操作如下表所示,更多操作符可以参考官方文档:https://docs.mongodb.com/manual/reference/operator/query-evaluation/。
名称 | 说明 |
---|---|
$expr | 为同一个文档中的字段指定表达式并且符合条件的查询,比如比较同一文档当中两个字段的值 |
$mod | 为字段值取模并且符合条件的查询 |
为了更好的使用这两个主要的操作符,额外创建个文档:
db.monthlyBudget.insertMany([
{ "_id" : 1, "category" : "food", "budget": 400, "spent": 450 },
{ "_id" : 2, "category" : "drinks", "budget": 100, "spent": 150 },
{ "_id" : 3, "category" : "clothes", "budget": 100, "spent": 50 },
{ "_id" : 4, "category" : "misc", "budget": 500, "spent": 300 },
{ "_id" : 5, "category" : "travel", "budget": 200, "spent": 650 }
]);
使用示例:
// $expr: 允许使用聚合表达式,这里以$gt为例,更多表达式参考 https://docs.mongodb.com/manual/meta/aggregation-quick-reference/#aggregation-expressions
db.monthlyBudget.find( { $expr: { $gt: [ "$spent" , "$budget" ] } } )
// $mod: 对字段所在值进行取模运算,显示符合条件的查询,如qty字段值对4取模,并且余数为0
db.inventory.find( { qty: { $mod: [ 4, 0 ] } } )
更新(Update Operations)
更新(Update Operations)是对已存在的文档进行修改操作,MongoDB提供以下几种主要更新文档方法:
- db.collection.update():更新或替换集合中符合条件的一个或多个文档;
- db.collection.updateOne():只更新集合中符合条件的第一个文档,即使有多个文档(版本3.2新增);
- db.collection.updateMany():更新集合中所有符合条件的文档(版本3.2新增)。
db.collection.update()
根据update
指定的表达式可以修改文档中符合条件的字段或代替整个文档。具体的语法格式如下:
db.collection.update(
<query>, //查询表达式
<update>, //更新表达式
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string> // 版本4.2新增
}
)
参数说明:
query:更新文档的查询表达式;如果指定了参数
upsert: true
并且集合中没有符合查询条件的文档,查询条件中有关于字段_id
指定了.
分隔符的,并不会插入新的文档;update:主要包含三种格式
- 1.更新文档:只包含更新操作符表达式;
- 2.替换文档:只包含
<field1>: <value1>
对; - 3.聚合管道:版本4.2新增,详细参考官方文档。
upsert:当query查询条件没符合更新的文档,就新创建文档(可选),默认值为false;
multi:是否更新多个符合条件的文档(可选),默认值为false,只更新符合条件的第一个文档;
writeConcern:参考db.collection.insert()相同参数说明;
collation:指定校对规则(可选,版本3.4新增);
arrayFilters:文档数组更新过滤操作符(可选,版本3.6新增);
hint:采用文档或字符串的形式指定适用于查询表达式的索引,如果索引不存在则报错(可选,版本4.2新增)。
使用示例:
使用示例将通过使用两种场景进行,一是没有使用参数选项upsert
,二是使用参数选项upsert
。
- 不使用选项upsert
// 测试数据
db.books.remove({});
db.books.insertMany([
{
"_id" : 1,
"item" : "TBD",
"stock" : 0,
"info" : { "publisher" : "1111", "pages" : 430 },
"tags" : [ "technology", "computer" ],
"ratings" : [ { "by" : "ijk", "rating" : 4 }, { "by" : "lmn", "rating" : 5 } ],
"reorder" : false
},
{
"_id" : 2,
"item" : "XYZ123",
"stock" : 15,
"info" : { "publisher" : "5555", "pages" : 150 },
"tags" : [ ],
"ratings" : [ { "by" : "xyz", "rating" : 5 } ],
"reorder" : false
}
]);
/* 使用选项参数 upsert: true
1、如果查询表达式找到匹配的文档,则执行更新操作;
2、如果查询表达式没有找到匹配的文档,则执行插入操作;
*/
db.books.update(
{ item: "ZZZ135" }, // 查询表达式
{ // 更新或替换文档
item: "ZZZ135",
stock: 5,
tags: [ "database" ]
},
{ upsert: true }
);
// 1.使用更新操作表达式
/* $set操作符
1、查询表达式指定需要更新的文档 _id;
2、$inc操作符: stock的字段值+5;
3、$set操作符: 替换item字段值,替换嵌入文档info的publisher字段值,替换tags字段值,替换数组ratings的第二个元素值
*/
db.books.update(
{ _id: 1 },
{
$inc: { stock: 5 },
$set: {
item: "ABC123",
"info.publisher": "2222",
tags: [ "software" ],
"ratings.1": { by: "xyz", rating: 3 }
}
}
);
更新之后的文档:
{
"_id" : 1,
"item" : "ABC123",
"stock" : 5,
"info" : { "publisher" : "2222", "pages" : 430 },
"tags" : [ "software" ],
"ratings" : [ { "by" : "ijk", "rating" : 4 }, { "by" : "xyz", "rating" : 3 } ],
"reorder" : false
}
// 2.为已存在的数组添加元素
// $push操作符: 为指定文档数组ratings添加一个元素
db.books.update(
{ _id: 2 },
{
$push: { ratings: { "by" : "jkl", "rating" : 2 } }
}
);
更新之后的文档:
{
"_id" : 2,
"item" : "XYZ123",
"stock" : 15,
"info" : {
"publisher" : "5555",
"pages" : 150
},
"tags" : [ ],
"ratings" : [
{ "by" : "xyz", "rating" : 5 },
{ "by" : "jkl", "rating" : 2 }
],
"reorder" : false
}
// 3.文档移除字段
// $unset操作符: 移除文档的指定字段,为_id:1文档移除tags字段
db.books.update( { _id: 1 }, { $unset: { tags: 1 } } );
更新后的文档:
{
"_id" : 1,
"item" : "TBD",
"stock" : 0,
"info" : {
"publisher" : "1111",
"pages" : 430
},
"ratings" : [ { "by" : "ijk", "rating" : 4 }, { "by" : "lmn", "rating" : 5 } ],
"reorder" : false
}
// 4.替换整个文档
// 替换_id:2的文档
db.books.update(
{ _id: 2 },
{
item: "XYZ123",
stock: 10,
info: { publisher: "2255", pages: 150 },
tags: [ "baking", "cooking" ]
}
);
更新后的文档:
{
"_id" : 2,
"item" : "XYZ123",
"stock" : 10,
"info" : { "publisher" : "2255", "pages" : 150 },
"tags" : [ "baking", "cooking" ]
}
// 5.更新多个文档
db.books.update(
{ stock: { $lte: 10 } },
{ $set: { reorder: true } },
{ multi: true }
);
更新后的全部文档:
[
{
"_id" : 1,
"item" : "ABC123",
"stock" : 5,
"info" : {
"publisher" : "2222",
"pages" : 430
},
"ratings" : [ { "by" : "ijk", "rating" : 4 }, { "by" : "xyz", "rating" : 3 } ],
"reorder" : true
}
{
"_id" : 2,
"item" : "XYZ123",
"stock" : 10,
"info" : { "publisher" : "2255", "pages" : 150 },
"tags" : [ "baking", "cooking" ],
"reorder" : true
}
]
- 使用upserts选项
/* 使用选项参数 upsert: true
1、如果查询表达式找到匹配的文档,则执行更新操作;
2、如果查询表达式没有找到匹配的文档,则执行插入操作;
*/
// 1.插入未符合更新条件的文档
db.books.update(
{ item: "ZZZ135" },
{
item: "ZZZ135",
stock: 5,
tags: [ "database" ]
},
{ upsert: true }
);
因为集合并未满足条件的文档,则插入的文档为:
{
"_id" : ObjectId("5da78973835b2f1c75347a83"),
"item" : "ZZZ135",
"stock" : 5,
"tags" : [ "database" ]
}
// 2.插入未符合更新条件并且基于更新操作符的文档
// 如果没有符合更新查询条件,并且使用的是更新操作符,则会基于当前的查询条件和更新操作符字段插入新的文档
db.books.update(
{ item: "BLP921" },
{
$set: { reorder: false },
$setOnInsert: { stock: 10 }
},
{ upsert: true }
);
新插入的文档为:
{
"_id" : ObjectId("5da79019835b2f1c75348a0a"),
"item" : "BLP921",
"reorder" : false,
"stock" : 10
}
// 3.插入未符合更新条件并且基于聚合管道的文档
// 关于聚合管道请参考官方文档:https://docs.mongodb.com/manual/reference/method/db.collection.update/#update-with-aggregation-pipeline
// 4.插入未符合更新条件并且同时联合多文档操作符的文档
如果不符合查询条件,则只会插入单个文档
db.books.update(
{ "info.publisher": "Self-Published" },
{
$set: { reorder: false, tags: [ "literature", "hardcover" ], stock: 25 }
},
{ upsert: true, multi: true }
);
新插入的文档:
{
"_id" : ObjectId("5db337934f670d584b6ca8e0"),
"info" : { "publisher" : "Self-Published" },
"reorder" : false,
"stock" : 25,
"tags" : [ "literature", "hardcover" ]
}
db.collection.updateOne()
根据update
指定的参数可以修改文档中符合条件的字段或代替整个文档,与db.collection.update()不同的是每次只更新单个文档。
语法格式如下:
db.collection.updateOne(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string>
}
)
参数说明:
参考db.collection.update()的参数说明。
使用示例:
// 参考db.collection.update()
db.collection.updateMany()
根据update
指定的参数可以修改文档中符合条件的字段或代替整个文档,与db.collection.updateOne()不同的是更新所有符合条件的文档。
语法格式如下:
db.collection.updateMany(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string>
}
)
参数说明:
参考db.collection.update()的参数说明。
使用示例:
// 参考db.collection.update()
删除(Delete Operations)
删除是指对集合当中已存在的文档进行清除操作,MongoDB提供以下几种主要删除文档方法:
- db.collection.deleteOne():只删除集合中符合条件的一个文档;
- db.collection.deleteMany():删除集合中所有符合条件的文档;
- db.collection.remove():删除集合中符合条件的一个或多个文档。
db.collection.deleteOne()
根据filter
选项条件删除集合中的单个文档,具体语法格式如下:
db.collection.deleteOne(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
参数说明:
- filter:指定基于查询表达式的过滤条件,关于查询表达式可以查看
db.collecion.find()
中的<query>
; - writeConcern:参考db.collection.insert()相同参数说明;
- collation:指定校对规则(可选,版本3.4新增);
使用示例:
// 删除指定条件的单个文档
db.orders.deleteOne( { "_id" : 1 } );
{ "acknowledged" : true, "deletedCount" : 1 }
db.collection.deleteMany()
根据filter
选项条件删除集合中的单个文档,具体语法格式如下:
db.collection.deleteMany(
<filter>,
{
writeConcern: <document>,
collation: <document>
}
)
参数说明:
参考db.collection.deleteOne()的参数说明。
使用示例:
// 删除指定条件的多个文档
db.orders.deleteMany( {"cust_id" : "Cam Elot"} );
{ "acknowledged" : true, "deletedCount" : 2 }
注意: 如果是对固定集合进行删除文档操作则会报错,固定集合的清除操作使用方法db.collection.drop()。
总结
- 本文简单梳理了在Mongo Shell下基本的CRUD操作,主要适用于DBA的运维管理,如果是研发同学,根据不同的编程语言使用不同客户端驱动进行操作,详细同样可以参考官方文档;
- 针对CRUD各个方面还有其他一些额外的方法,比如查询修改文档方法db.collection.findAndModify(),这里只是总结每个文档操作中一些最基础的方法,对于额外高级的方法这里不再赘述;
- 掌握了这些基本的CRUD操作,就可以对MongoDB文档进行操作了,但还是需要控制好权限,毕竟数据安全不是小事,做变更之前做好数据的备份,以防万一。
参考
https://docs.mongodb.com/manual/crud/
https://docs.mongodb.com/manual/reference/operator/query-evaluation/
☆〖本人水平有限,文中如有错误还请留言批评指正!〗☆
MongoDB 4.X CRUD基本操作的更多相关文章
- MongoDB的ObjectId和基本操作增删改查(3)
ObjectId 基本操作增删改查 增: insert 介绍: mongodb存储的是文档,. 文档是json格式的对象. 语法: db.collectionName.insert(document) ...
- MongoDB的安装和基本操作
一.使用前的准备(windows下的安装) 1.下载 目前MongoDB的官网不知道问什么不能进行下载了,但是可以在MongoDB中文论坛进行下载, 地址如下:http://www.mongoing ...
- MongoDB文档的基本操作
1. MongoDB的安装方法 (1)下载MongoDB 相应的版本: (2)设置数据文件和日志文件的存放目录: (3)启动MongoDB服务: (4)将MongoDB作为服务启动. 2. Mongo ...
- 学习MongoDB 七: MongoDB索引(索引基本操作)(一)
一.简介 在MongoDB建立索引能提高查询效率,只需要扫描索引只存储的这个集合的一小部分,并只把这小部分加载到内存中,效率大大的提高,如果没有建立索引,在查询时,MongoDB必须执行全表扫描,在数 ...
- MongoDB自学日记1——基本操作
作为一个做底层及后台研发的,最近对NoSQL却产生了浓厚的兴趣,加入了一个DBA群,据说北京排的上号的DBA都在里面,然而里面基本都是Oracle系的,MySQL和MongoDB系的少之又少.学习靠不 ...
- mongodb 数据操作CRUD
链接到mongo 新建超级用户 上文中我们提到mongo用户库表管理.为了方便我们先新建一个root权限的用户. db.createUser({user:'dbadmin',pwd:'123456', ...
- Elasticsearch CRUD基本操作
前言 本次我们聊一聊Elasticsearch的基本操作CRUD,他跟我们常用的关系型数据库的操作又有什么不一样的地方呢?今天我们就来好好讲解一番. 说明 本次演示用的版本是7.11. 工具可以使用K ...
- MongoDB 安装和即基本操作
http://www.mongodb.org/ Agile and Scalable MongoDB (from "humongous") is an open-source do ...
- MongoDB 操作手冊CRUD插入
插入操作 插入记录 1.插入一条记录 db.testData.insert({num:1,name:'a'}); 结果 WriteResult({ "nInserted" : 1 ...
随机推荐
- Fragment 嵌套Fragment注意事项
最近项目新功能需要在垂直方方向可以循环滚动,并且水平方向也可以水平循环滚动,并且可以定位到指定item上.很自然的想到了ViewPager和 VerticalViewPager来解决项目需求,UI的大 ...
- maven and dubbo
maven是什么 maven是一个项目管理和构建自动化工具. 核心概念 pom (project object model) mvn compile 编译 mvn package 编译成一个jar的包 ...
- 关于react的一些总结
之前为了学习redux买了一本<深入浅出react和redux>,只看了redux部分.最近重新一遍,还是很有收获,这里结合阅读文档时的一些理解,记下一些初学者可能不太注意的东西. 原则: ...
- 王艳 201771010127《面向对象程序设计(java)》第八周学习总结
一:理论部分. 1.接口:Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多接口.(接口不是类,而是对类的一组需求描述,它由常量和一组抽象方法组成) 1)通常,接口名称以able ...
- MySQL(9)— 规范数据库设计
九.规范数据库设计 9-1.为什么要设计? 当数据库比较复杂时,我们就需要设计了! 糟糕的数据库设计: 数据冗余,浪费大量存储空间 使用物理外键,大量的增删改操作麻烦,异常 查询效率低下 良好的数据库 ...
- BZOJ4260异或和
4260: Codechef REBXOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 918 Solved: 420[Submit][Statu ...
- Spring MVC必须知道的执行流程
Spring MVC的执行流程 一.名词解释 1.前端控制器(DispatcherServlet) 接收请求,响应结果,相当于转发器,中央处理器 2.处理器映射器(HandlerMapping) 根据 ...
- SQL——MySQL数据类型
Text类型: Number类型: Date类型:
- (一) Vue在创建的时候 入口文件 及相关的路由配置(及子路由配置)
1. 首先明确一点 在书写之前尽量保持相关的文件知道含义 比如 components 啥的 知道是要放什么东西 在这里介绍一下 由于 vue 不是系统学习 所以很多的创建方式可能不一样 就是有 ...
- Verilog语言中的系统任务和系统函数
Verilog语言中预先定义了一些任务和函数,用于完成一些特殊的功能,它们被称为系统任务和系统函数,这些函数大多数都是只能在Testbench仿真中使用的,使我们更方便的进行验证. `timescal ...