5. MongoDB 文档插入、更新、删除、查询
1. 插入文档
文档的数据结构和JSON基本一样。所有存储在集合中的数据都是BSON格式。
BSON是一种类似JSON的二进制形式的存储格式,是Binary JSON的简称。常用的插入文档方法包括:
- db.collection.insertOne():插入单个文档
- db.collection.insertMany():插入多个文档
- db.collection.save():类似于insertOne()。如果文档存在,则该文档会被更新;如果文档不存在,则会插入一个新文档。
1.1 insertOne()
insertOne() 方法用于在集合中插入单个文档。
db.collection.insertOne(document, options)
- document:要插入的单个文档。
- options(可选):一个可选参数对象,可以包含writeConcern和bypassDocumentValidation等
db.myCollection.insertOne({name: "Alice",age: 25,city: "New York"
});返回结果:
{"acknowledged": true,"insertId": ObjectId("60c72b2f9b1d8b5a5f8e2b2d")
}
1.2 insertMany()
insertMany()方法用于在集合中插入多个文档。
db.collection.insertMany(documents, options)
- documents:要插入的文档数组
- options(可选):一个可选参数对象,可以包含ordered、writeConcern和bypassDocumentValidation等。
db.myCollection.insertMany([{ name: "Bob", age: 30, city: "Los Angeles" },{ name: "Charlie", age: 35, city: "Chicago" }
]);返回结果:
{"acknowledged": true,"insertedIds": [ObjectId("60c72b2f9b1d8b5a5f8e2b2e"),ObjectId("60c72b2f9b1d8b5a5f8e2b2f")]
}
1.3 db.collection.save()
save() 方法在插入文档时表现得类似于 insertOne()。
如果文档包含 _id 字段且已存在,则该文档会被更新;如果文档不包含 _id 字段或 _id 不存在,则会插入一个新文档。
db.collection.save(document, options)
- document:要保存的文档。
- options(可选):一个可选参数对象,可以包含 writeConcern 等。
插入文档时的选项:
这些方法的options参数通常可以包含 以下选项:
- ordered(仅适用于insertMany):布尔值。如果为true,则按顺序插入文档,在遇到错误时停止;如果为false,则尝试插入所有文档,即使遇到错误也继续。默认值为true。
- writeConcern:指定写操作的确认级别
- bypassDocumentValidation:布尔值。如果为 true,则忽略集合的文档验证规则。
1.4 实例
通过这些方法,你可以灵活地将文档插入到 MongoDB 集合中,以满足各种应用场景的需求。
插入单个文档:
db.myCollection.insertOne({name: "Alice",age: 25,city: "New York"
});插入多个文档:
db.myCollection.insertMany([{ name: "Bob", age: 30, city: "Los Angeles" },{ name: "Charlie", age: 35, city: "Chicago" }
]);保存文档:
db.myCollection.save({_id: ObjectId("60c72b2f9b1d8b5a5f8e2b2d"),name: "David",age: 40,city: "San Francisco"
});
以下文档可以存储在 MongoDB 的 runoob 数据库 的 col 集合中:
>db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库',by: '菜鸟教程',url: 'http://www.runoob.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100
})以上实例中 col 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。
查看已插入文档:
> db.col.find()
{ "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
> 我们也可以将数据定义为一个变量,如下所示:
> document=({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库',by: '菜鸟教程',url: 'http://www.runoob.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100
});执行后显示结果如下:
{"title" : "MongoDB 教程","description" : "MongoDB 是一个 Nosql 数据库","by" : "菜鸟教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100
}执行插入操作:
> db.col.insert(document)
WriteResult({ "nInserted" : 1 })
> 插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。
2. 更新文档
updateOne()
updateMany()
replaceOne()
findOneAndUpdate()
2.1 updateOne()
用于更新匹配过滤器的单个文档。
db.collection.updateOne(filter, update, options)
- filter:用于查找文档的查询条件。
- update:指定更新操作的文档或更新操作符。
- options:可选参数对象,如
upsert
、arrayFilters
等。
db.myCollection.updateOne({ name: "Alice" }, //过滤条件{ $set: { age: 26 } }, //更新操作{ upsert: false }, //可选操作
);
2.2 updateMany()
用于更新所有匹配过滤器的文档。
db.collection.updateMany(filter, update, options)
- filter:用于查找文档的查询条件。
- update:指定更新操作的文档或更新操作符。
- options:可选参数对象,如
upsert
、arrayFilters
等。
db.myCollection.updateMany({ age: { $lt: 30 } }, //过滤条件{ $set: { status: "active" } }, //更新操作{ upsert: false } //可选参数
);
2.3 replaceOne()
用于替换匹配过滤器的单个文档,新的文档将完全替换旧的文档。
db.collection.replaceOne(fileter, replacement, options)
- filter:用于查找文档的查询条件。
- replacement:新的文档,将替换旧的文档。
- options:可选参数对象,如
upsert
等。
db.myCollection.replaceOne({ name: "Bob" }, //过滤条件{ name: "Bob", age: 31 } //新文档
);
2.4 findOneAndUpdate()
用于查找并更新单个文档,可以选择返回更新前或更新后的文档。
db.collection.findOneAndUpdate(filter, update, options)
- filter:用于查找文档的查询条件。
- update:指定更新操作的文档或更新操作符。
- options:可选参数对象,如
projection
、sort
、upsert
、returnDocument
等。
db.myCollection.findOneAndUpdate({ name: "Charlie" }, //过滤条件{ $set: { age: 36 } }, //更新操作{returnDocument: "after" } //可选参数,返回更新后的文档
);
选项参数
- upsert:如果没有匹配的文档,是否插入一个新文档。
- arrayFilters:当更新嵌套数组时,指定应更新的数组元素的条件。
- collation:指定比较字符串时使用的排序规则。
- returnDocument:在 findOneAndUpdate 中使用,指定返回更新前 ("before") 或更新后 ("after") 的文档。
2.5 实例
更新单个文档:
db.myCollection.updateOne({ name: "Alice" },{ $set: { age: 26 } }
);更新多个文档:
db.myCollection.updateMany({ age: { $lt: 30 } },{ $set: { status: "active" } }
);替换单个文档:
db.myCollection.replaceOne({ name: "Bob" },{ name: "Bob", age: 31 }
);查找并更新单个文档:
db.myCollection.findOneAndUpdate({ name: "Charlie" },{ $set: { age: 36 } },{ returnDocument: "after" }
);
替换了 _id 为 56064f89ade2f21f36b03136 的文档数据:
>db.col.save({"_id" : ObjectId("56064f89ade2f21f36b03136"),"title" : "MongoDB","description" : "MongoDB 是一个 Nosql 数据库","by" : "Runoob","url" : "http://www.runoob.com","tags" : ["mongodb","NoSQL"],"likes" : 110
})替换成功后,可以通过 find() 命令来查看替换后的数据
>db.col.find().pretty()
{"_id" : ObjectId("56064f89ade2f21f36b03136"),"title" : "MongoDB","description" : "MongoDB 是一个 Nosql 数据库","by" : "Runoob","url" : "http://www.runoob.com","tags" : ["mongodb","NoSQL"],"likes" : 110
}
>
只更新第一条记录:
db.col.update({ "count" : { $gt : 1 } },{ $set : { "test2" : "OK"} }
);全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true
);只添加第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false
);全部添加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true
);全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true
);只更新第一条记录:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false
);
3. 删除文档
常用的删除文档方法包括 deleteOne()、deleteMany() 以及 findOneAndDelete()。
使用场景:
- 数据清理:删除不再需要的旧数据或无效数据。
- 数据修正:在数据修正过程中删除错误的或重复的文档。
- 自动化任务:在自动化脚本或任务中,根据特定条件删除文档。
3.1 deleteOne()
用于删除匹配过滤器的单个文档。
db.collection.deleteOne(filter, options)
- filter:用于查找要删除的文档的查询条件。
- options(可选):一个可选参数对象。
db.myCollection.deleteOne({ name: "Alice" });结果
{"acknowledged": true,"deletedCount": 1
}
3.2 deleteMany()
用于删除所有匹配过滤器的文档。
db.collection.deleteMany(filter, options)
- filter:用于查找要删除的文档的查询条件。
- options(可选):一个可选参数对象。
db.myCollection.deleteMany({ status: "inactive" });返回结果:
{"acknowledged": true,"deletedCount": 1
}
3.3 findOneAndDelete()
用于查找并删除单个文档,并可以选择返回删除的文档。
db.collection.findOneAndDelete(filter, options)
- filter:用于查找要删除的文档的查询条件。
- options:可选参数对象,如
projection
、sort
等。
db.myCollection.findOneAndDelete({ name: "Charlie" },{ projection: { name: 1, age: 1 } }
);
!!findOneAndDelete 返回被删除的文档,如果找不到匹配的文档,则返回 null。
删除操作的选项
这些删除方法的 options 参数通常可以包含以下选项:
- writeConcern:指定写操作的确认级别。
- collation:指定比较字符串时使用的排序规则。
- projection(仅适用于
findOneAndDelete
):指定返回的字段。- sort(仅适用于
findOneAndDelete
):指定排序顺序以确定要删除的文档。
3.4 实例
删除单个文档:
db.myCollection.deleteOne({ name: "Alice" });删除多个文档:
db.myCollection.deleteMany({ status: "inactive" });查找并删除单个文档:
db.myCollection.findOneAndDelete({ name: "Charlie" },{ projection: { name: 1, age: 1 } }
);
4. 查询文档
4.1 查询方法
MongoDB 查询文档使用 find()、findOne() 方法。
find() 方法以非结构化的方式来显示所有文档。
4.1.1 find()
db.collection.find(query, projection)
- query:用于查找文档的查询条件。默认为
{}
,即匹配所有文档。- projection(可选):指定返回结果中包含或排除的字段。
查找所有文档:
db.myCollection.find();按条件查找文档:
db.myCollection.find({ age: { $gt: 25 } });按条件查找文档,并只返回指定字段:
db.myCollection.find({ age: { $gt: 25 } },{ name: 1, age: 1, _id: 0 }
);
需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
>db.col.find().pretty()pretty() 方法以格式化的方式来显示所有文档。
db.col.find().pretty()
{"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一个 Nosql 数据库","by" : "菜鸟教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100
}
4.1.2 findOne()
用于查找集合中的单个文档。如果找到多个匹配的文档,它只返回第一个。
db.collection.findOne(query, projection)
- query:用于查找文档的查询条件。默认为
{}
,即匹配所有文档。- projection(可选):指定返回结果中包含或排除的字段。
查找单个文档:
db.myCollection.findOne({ name: "Alice" });查找单个文档,并只返回指定字段:
db.myCollection.findOne({ name: "Alice" },{ name: 1, age: 1, _id: 0 }
);
4.2 高级查询方法
4.2.1 使用比较操作符
MongoDB 支持多种比较操作符,如 $gt、$lt、$gte、$lte、$eq、$ne 等。
比较操作符有:
操作符 | 描述 | 示例 |
---|---|---|
$eq | 等于 | { age: { $eq: 25 } } |
$ne | 不等于 | { age: { $ne: 25 } } |
$gt | 大于 | { age: { $gt: 25 } } |
$gte | 大于等于 | { age: { $gte: 25 } } |
$lt | 小于 | { age: { $lt: 25 } } |
$lte | 小于等于 | { age: { $lte: 25 } } |
$in | 在指定的数组中 | { age: { $in: [25, 30, 35] } } |
$nin | 不在指定的数组中 | { age: { $nin: [25, 30, 35] } } |
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value> } | db.col.find({"by":"菜鸟教程"}).pretty() | where by = '菜鸟教程' |
小于 | {<key>:{$lt:<value>}} | db.col.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} | db.col.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | db.col.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} | db.col.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} | db.col.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
查找年龄大于 25 的文档:
db.myCollection.find({ age: { $gt: 25 } });
4.2.2 使用逻辑操作符
MongoDB 支持多种逻辑操作符,如 $and、$or、$not、$nor 等。
逻辑操作符有:
操作符 | 描述 | 示例 |
---|---|---|
$and | 逻辑与,符合所有条件 | { $and: [ { age: { $gt: 25 } }, { city: "New York" } ] } |
$or | 逻辑或,符合任意条件 | { $or: [ { age: { $lt: 25 } }, { city: "New York" } ] } |
$not | 取反,不符合条件 | { age: { $not: { $gt: 25 } } } |
$nor | 逻辑与非,均不符合条件 | { $nor: [ { age: { $gt: 25 } }, { city: "New York" } ] } |
查找年龄大于 25 且城市为 "New York" 的文档:
db.myCollection.find({$and: [{ age: { $gt: 25 } },{ city: "New York" }]
});
4.2.3 使用正则表达式
可以使用正则表达式进行模式匹配查询。
查找名字以 "A" 开头的文档:
db.myCollection.find({ name: /^A/ });
4.2.4 投影
投影用于控制查询结果中返回的字段。可以使用包含字段和排除字段两种方式。
只返回名字和年龄字段:db.myCollection.find({ age: { $gt: 25 } },{ name: 1, age: 1, _id: 0 }
);
4.2.5 排序
可以对查询结果进行排序。
按年龄降序排序:
db.myCollection.find().sort({ age: -1 });
4.2.6 限制与跳过
可以对查询结果进行限制和跳过指定数量的文档。
返回前 10 个文档:
db.myCollection.find().limit(10);跳过前 5 个文档,返回接下来的 10 个文档:
db.myCollection.find().skip(5).limit(10);
4.2.7 实例
查找年龄大于 25 且城市为 "New York" 的文档,只返回名字和年龄字段,按年龄降序排序,并返回前 10 个文档。
db.myCollection.find({$and: [{ age: { $gt: 25 } },{ city: "New York" }]},{ name: 1, age: 1, _id: 0 }
).sort({ age: -1 }).limit(10);
4.3 MongoDB AND 条件
find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。
语法格式如下:
>db.col.find({key1:value1, key2:value2}).pretty()
通过 by 和 title 键来查询 菜鸟教程 中 MongoDB 教程 的数据> db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"}).pretty()
{"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一个 Nosql 数据库","by" : "菜鸟教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100
}以上实例中类似于 WHERE 语句:WHERE by='菜鸟教程' AND title='MongoDB 教程'
4.4 MongoDB OR 条件
MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
>db.col.find({$or: [{key1: value1}, {key2:value2}]} ).pretty()
查询键 by 值为 菜鸟教程 或键 title 值为 MongoDB 教程 的文档。>db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
{"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一个 Nosql 数据库","by" : "菜鸟教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100
}
>
4.5 AND 和 OR 联合使用
以下实例演示了 AND 和 OR 联合使用,类似常规 SQL 语句为: 'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'>db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
{"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程","description" : "MongoDB 是一个 Nosql 数据库","by" : "菜鸟教程","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100
}
4.6 条件操作符
4.6.1 元素操作符
操作符 | 描述 | 示例 |
---|---|---|
$exists | 字段是否存在 | { age: { $exists: true } } |
$type | 字段的 BSON 类型 | { age: { $type: "int" } } |
4.6.2 数组操作符
操作符 | 描述 | 示例 |
---|---|---|
$all | 数组包含所有指定的元素 | { tags: { $all: ["red", "blue"] } } |
$elemMatch | 数组中的元素匹配指定条件 | { results: { $elemMatch: { score: { $gt: 80, $lt: 85 } } } } |
$size | 数组的长度等于指定值 | { tags: { $size: 3 } } |
4.6.3 其他操作符
操作符 | 描述 | 示例 |
---|---|---|
$regex | 匹配正则表达式 | { name: { $regex: /^A/ } } |
$text | 进行文本搜索 | { $text: { $search: "coffee" } } |
$where | 使用 JavaScript 表达式进行条件过滤 | { $where: "this.age > 25" } |
4.7 $type操作符
在 MongoDB 中,$type 操作符用于查询具有指定类型的字段的文档。MongoDB 的 $type 操作符用于查询字段的 BSON 数据类型。允许指定一个或多个类型,并返回匹配这些类型的文档。
db.collection.find({ field: { $type: <type> } })
- field:要检查类型的字段。
- type:指定的 BSON 类型,可以是类型的数字代码或类型名称的字符串。
4.7.1 BSON类型
常见的 BSON 类型及其对应的数字代码和字符串名称:
类型代码 | 类型名称 |
---|---|
1 | double |
2 | string |
3 | object |
4 | array |
5 | binData |
6 | undefined |
7 | objectId |
8 | bool |
9 | date |
10 | null |
11 | regex |
12 | dbPointer |
13 | javascript |
14 | symbol |
15 | javascriptWithScope |
16 | int |
17 | timestamp |
18 | long |
19 | decimal |
255 | minKey |
127 | maxKey |
4.7.2 实例
查找字段类型为字符串的文档:
db.myCollection.find({ fieldName: { $type: "string" } })
或使用类型代码:
db.myCollection.find({ fieldName: { $type: 2 } })查找字段类型为数字的文档,例如,查找 age 字段类型为整数的文档:
db.myCollection.find({ age: { $type: "int" } })
或使用类型代码:
db.myCollection.find({ age: { $type: 16 } })查找字段类型为布尔值的文档:
db.myCollection.find({ isActive: { $type: "bool" } })
或使用类型代码:
db.myCollection.find({ isActive: { $type: 8 } })查找字段类型为日期的文档:
db.myCollection.find({ createdAt: { $type: "date" } })
或使用类型代码:
db.myCollection.find({ createdAt: { $type: 9 } })查找字段类型为多种类型的文档,例如,查找 value 字段类型为字符串或整数的文档:
db.myCollection.find({ value: { $type: ["string", "int"] } })
或使用类型代码:
db.myCollection.find({ value: { $type: [2, 16] } })
查找 details 字段类型为对象,并且 score 字段类型为双精度浮点数的文档:
db.myCollection.find({$and: [{ details: { $type: "object" } },{ score: { $type: "double" } }]
})或使用类型代码:
db.myCollection.find({$and: [{ details: { $type: 3 } },{ score: { $type: 1 } }]
})
相关文章:

5. MongoDB 文档插入、更新、删除、查询
1. 插入文档 文档的数据结构和JSON基本一样。所有存储在集合中的数据都是BSON格式。 BSON是一种类似JSON的二进制形式的存储格式,是Binary JSON的简称。常用的插入文档方法包括: db.collection.insertOne():插入单个文档db.collection.inse…...

⌈ 传知代码 ⌋ DETR[端到端目标检测]
💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…...

Oracle之触发器
简介 触发器在数据库里以独立的对象存储,他与存储过程不同的是,存储过程通过其他程序来启动运行或直接启动运行而触发器是由一个事件来启动运行,即触发器是当某个事件发生时自动式运行。并企,触发器不能接收参数。所以运行触发器…...

从零搭建微前端架构:解耦大型项目的终极方案
随着前端应用的复杂度不断提升,单体前端应用(Monolithic Frontend)的维护和扩展难度也日益增加。微前端(Micro-Frontend)作为一种新兴架构理念,旨在将大型前端项目拆分为多个独立、可独立部署的微应用,从而提升项目的可维护性和灵活性。这篇文章将带你从零开始搭建一个微…...

24/8/17算法笔记 MPC算法
MPC算法,在行动前推演一下 MPC(Model Predictive Control,模型预测控制)是一种先进的控制策略,它利用未来预测模型来优化当前的控制动作。MPC的核心思想是,在每一个控制步骤中,都基于当前系统状…...

GROUP_CONCAT 用法详解(Mysql)
GROUP_CONCAT GROUP_CONCAT 是 MySQL 中的一个聚合函数,用于将分组后的多行数据连接成一个单一的字符串。 通常用于将某个列的多个值合并到一个字符串中,以便更方便地显示或处理数据。 GROUP_CONCAT([DISTINCT] column_name[ORDER BY column_name [ASC…...

Golang httputil 包深度解析:HTTP请求与响应的操控艺术
标题:Golang httputil 包深度解析:HTTP请求与响应的操控艺术 引言 在Go语言的丰富标准库中,net/http/httputil包是一个强大的工具集,它提供了操作HTTP请求和响应的高级功能。从创建自定义的HTTP代理到调试HTTP流量,h…...

SQLALchemy 分页
SQLALchemy 分页 1. 使用SQLAlchemy的`slice`和`offset`/`limit`SQLAlchemy 1.4及更新版本SQLAlchemy 1.3及更早版本使用第三方库注意事项在Web开发中,分页是处理大量数据时一个非常重要的功能。SQLAlchemy是一个流行的Python SQL工具包和对象关系映射(ORM)库,它允许开发者…...

快速上手体验MyPerf4J监控springboot应用(docker版快速开始-本地版)
使用MyPerf4J监控springboot应用 快速启动influxdb时序数据库日志收集器telegrafgrafana可视化界面安装最终效果 项目地址 项目简介: 一个针对高并发、低延迟应用设计的高性能 Java 性能监控和统计工具。 价值 快速定位性能瓶颈快速定位故障原因 快速启动 监控本地应用 idea配…...

C语言 之 strlen、strcpy、strcat、strcmp字符串函数的使用和模拟实现
文章目录 strlen的使用和模拟实现函数的原型strlen模拟实现:方法1方法2方法3 strcpy的使用和模拟实现函数的原型strcpy的模拟实现: strcat的使用和模拟实现函数的原型strcat的模拟实现: strcmp的使用和模拟实现函数的原型strcmp的模拟实现 本…...

CAPL使用结构体的方式组装一条DoIP车辆识别请求报文(payload type 0x0002)
DoIP车辆识别请求(payload type 0x0002)报文的格式为: /******************************************************** +--------+--------+--------+--------+ |version | inVer | type | +--------+--------+--------+--------+ | length …...

数据接入教学
数据接入教学 1、开通外部网络策略2、检查本地防火墙策略3、测试网络连通性4、工具抓包命令5、本地测试发送与监听 1、开通外部网络策略 保证外部网络联通、保证内部防火墙开通策略(可以关闭进行测试) 2、检查本地防火墙策略 关闭进行测试 停止firewa…...

炒作将引发人工智能寒冬
我们似乎经常看到人工智能的进步被吹捧为机器真正变得智能的一大飞跃。我将在这里挑选其中的一个例子,并确切解释为什么这种态度会为人工智能的未来埋下隐患。 这很酷,这是一个非常困难且非常具体的问题,这个团队花了3 年时间才解决。他们一定…...

clamp靶机复现
靶机设置 设置靶机为NAT模式 靶机IP发现 nmap 192.168.112.0/24 靶机IP为192.168.112.143 目录扫描 dirsearch 192.168.112.143 访问浏览器 提示让我们扫描更多的目录 换个更大的字典,扫出来一个 /nt4stopc/ 目录 目录拼接 拼接 /nt4stopc/ 发现页面中有很多…...

mfc100u.dll丢失问题分析,详细讲解mfc100u.dll丢失解决方法
面对mfc100u.dll文件丢失带来的挑战时,许多用户都可能感到有些无助,尤其是当这一问题影响到他们日常使用的软件时。但实际上,存在几种有效方法可以帮助您快速恢复该关键的系统文件。为了方便不同水平的用户,本文将详细解析各种处理…...

【C++】什么是内存管理?
如果有不懂的地方,可以看我以往文章哦! 个人主页:CSDN_小八哥向前冲 所属专栏:C入门 目录 C/C内存分布 C内存管理方式 new/delete操作内置类型 new/delete操作自定义类型 operator new与operator delete函数 new和delete实现…...

产业经济大脑建设方案(五)
为了提升产业经济的智能化水平,我们提出建设一个综合产业经济大脑系统,该系统通过整合大数据分析、人工智能和云计算技术,构建全方位的数据采集、处理和决策支持平台。该平台能够实时监测产业链各环节的数据,运用智能算法进行深度…...

如何在 Odoo 16 中覆盖创建、写入和取消链接方法
Odoo 是一款强大的开源业务应用程序套件,可为各种业务运营提供广泛的功能。其主要功能之一是能够自定义和扩展其功能以满足特定的业务需求。在本博客中,我们将探讨如何覆盖Odoo 16中的创建、写入和取消链接方法,从而使您无需修改核心代码…...

pip离线安装accelerate
一、离线下载到当前文件夹 pip download accelerate -d ./anzhuangbao# 制定版本使用以下命令pip download accelerate0.32.0 -d ./anzhuangbao二、离线安装 cd anzhuangbaipip install --no-index --find-links. accelerate三、验证是否安装 pip show accelerateAccelerate: …...

VUE3请求意外报跨越错误或者500错误问题
1.有可能是请求传参和传参类型写错了 首先要确保该请求接口是支持跨域的(不支持叫后端改) access-control-allow-headers:Content-Type, Accept, Access-Control-Allow-Origin, api_key, Authorization access-control-allow-methods:GET, POST, OPTIO…...

vue 关于两个if条件中的promise
一、案例效果 期望if判断条件里的两个promise 都同时执行完成 二、 初始代码案例 const formatDetail async (fnArgsJsonParams: MapLogicType) > {if (fnArgsJsonParams?.targetFeatureName) {const resDetailData await formatFeatureInfo(fnArgsJsonParams.targetF…...

C/C++移位运算问题
目录 上期答案揭晓: 回忆: 问题1展现: 问题2展现: 改进方案: 下期预告:C语言类型转换的问题。 上期答案揭晓: 上期的问题大家是否都有了想法,下面说说我的思路。 上次我们提到…...

录屏工具 Icecream Screen Recorder PRO v7.41
Icecream Screen Recorder的免费屏幕录制工具,具备捕捉视频、音频、图片和游戏等多种功能。以前推荐过的icecreamPDF也是他家的非常好用! 下载链接:「录屏」来自UC网盘分享https://drive.uc.cn/s/b474616b91534...

解决连接不上Linux和服务器中的Nacos(Windows中能连接但是Linux中却不行)
报错 com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNKNOWN: Uncaught exception in the SynchronizationContext. Re-thrown. at com.alibaba.nacos.shaded.io.grpc.Status.asRuntimeException(Status.jav 2024-08-13T10:21:52.93708:00 ERROR 27764 --- …...

【LLM大语言模型-开篇】LLM入门实践指南
"LLM入门实践指南"是一个通过代码实践,为大模型入门读者提供全面且较为深入的大模型技术视角的教程。 为何关注LLM? 创新与变革:LLM不仅推动了自然语言处理(NLP)领域的进步,还在诸多行业中催生了…...

实时视频换脸、8 万家 AI 公司消失、论文天价售卖、新的 scaling law、爆火毒舌 AI | AI 掘金视界周刊第 5 期
AI 视界周刊由战场小包维护,每周一更新,包含热点聚焦、应用破局、学术前沿、社区热议、智见交锋、跨界 AI、企业动态和争议 AI 八大板块,后续板块划分和内容撰写在周刊迭代过程中持续优化,欢迎大家提出建议。 欢迎大家来到《AI 视…...

XSS靶场(1-11关)
目录 简述xss xss第1关 xss第2关 编辑 xss第3关 xss第4关 xss第5关过滤了 on script xss第6关 xss第7关 xss第8关 xss第9关 xss第10关 xss11关 我把源代码靶场放到了最顶端 简述xss XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法…...

vue2 子组件props接收父组件对象或数组必须使用函数进行返回
export default{ name:MyComponent, props:{ title:{ type:String, default:"" }, age:{ type:Number, default:1 }, names:{ type:Array, //数组或对象必须用函数进行返回 default:function(){ return [] …...

【算法/学习】双指针
✨ 少年要迎着朝阳,活得肆无忌惮 🌏 📃个人主页:island1314 🔥个人专栏:算法学习 🚀 欢迎关注:👍点赞 &a…...

Springboot集成Liquibase笔记整理
添加依赖<dependency><groupId>org.liquibase</groupId><artifactId>liquibase-core</artifactId> </dependency>添加配置spring:liquibase:contexts: dev,testenabled: true编写liquibase配置类Configuration EnableConfigurationPropert…...