Mongodb命令大全
Mongodb命令大全
- 一、数据库相关命令
- 二、集合相关命令
- 三、文档(数据)相关命令
- 1、_id 字段说明
- 2、查询
- 2.1、 查询操作符
- 2.2、内嵌文档查询
- 2.3、数组文档查询
- 2.4、去重查询
- 2.5、查询排序 sort
- 2.6、分页查询
- 2.7、指定列投影查询返回
- 2.8、查询统计个数 count
- 3、聚合查询
- 3.1、查询用户表中name=tom的文档
- 3.2、查询订单表中 amount大于 300 的订单
- 3.3、查询订单中 status = 1 并且 amount 大于 300 的订单
- 3.4、内嵌查询
- 3.5、查找 amount 大于 200 的订单,并按 amount 降序排序
- 4、分组查询group
- 4.1、按 item 字段分组并计算总销售量
- 4.2、按 date 字段分组并计算总销售额
- 4.3、按 item 分组,并计算每种商品的平均价格和总销售量
- 4.4、按 item 分组,并创建一个包含所有销售日期的数组
- 4.5、按 item 分组,并创建一个包含唯一销售日期的数组
- 4.6、查询结果后再分组
- 4.7、对分组结果进行排序
- 2、插入
- 3、修改
- 4、删除
- 5、计划查询
- 6、多表连接查询 $lookup
一、数据库相关命令
- 选择数据库
// 语法
use <database_name>// 示例
use mydatabase
- 显示当前数据库
db
- 查询数据库列表
show dbs
- 删除当前所在数据库
db.dropDatabase()
- 创建数据库
在插入数据时自动创建,见文档下面的插入数据
二、集合相关命令
- 显示集合列表
show collections
- 创建集合
// 语法
db.createCollection(<collection_name>, { options })// 示例
db.createCollection("products")// 创建固定大小的集合,当集合达到指定的大小时,它会覆盖最早的文档。固定大小的集合的文档一旦插入就不允许修改// 示例,创建固定大小的集合,capped=true表示集合有大小上限,size是字节单位
db.createCollection("products", {capped: true, size: 1048576 })// 示例,创建固定大小的集合,capped=true表示集合有大小上限,size是字节单位,max是最大文档数
db.createCollection("products", {capped: true, size: 1048576, max: 1000})
- 删除集合
// 语法
db.<collection_name>.drop()// 示例
db.products.drop()
三、文档(数据)相关命令
1、_id 字段说明
_id 字段是每个文档的唯一标识符,确保每个文档在集合中是唯一的。这个字段在每个文档中都是必须的,并且在插入文档时会自动生成。如果没有显式指定 _id,MongoDB 会为其生成一个唯一的 ObjectId。
假如我们在插入数据时没有指定_id值:
db.users.insertOne({ "name": "Alice", "age": 25 })
MongoDB 会自动生成一个 ObjectId 作为 _id,如下:
{"_id": ObjectId("60a7c0c8b59b3c001c8e4f2d"),"name": "Alice","age": 25
}
2、查询
- 使用 _id 进行查询
db.users.find({ "_id": ObjectId("60a7c0c8b59b3c001c8e4f2d") })
指定_id值:
db.users.insertOne({ "_id": 1, "name": "Bob", "age": 30 }){"_id": 1,"name": "Bob","age": 30
}
使用 _id 进行查询:
db.users.find({ "_id": 1 })
2.1、 查询操作符
查询操作符
符号 | 说明 |
---|---|
$eq | 等于 |
$ne | 不等于 |
$gt | 大于 |
$lt | 小于 |
$gte | 大于等于 |
$lte | 小于等于 |
逻辑操作符
符号 | 说明 |
---|---|
$and | 逻辑与 |
$or | 逻辑或 |
$not | 逻辑非 |
$nor | 逻辑非或 |
- 查询单个文档(查询单个数据) findOne
// 语法
db.<collection_name>.findOne({ 列名: "值" });// 示例,对比mysql:select * from users where name = 'Tom'
db.users.findOne({ name: "Tom" });
- 查询多个文档(查询多个数据) find
// 示例,对比mysql:select * from users where age > 25
db.users.find({ age: { $gt: 25 } });// 将返回结果游标转成数组
db.users.find({ age: { $gt: 25 } }).toArray();
- 查询范围
// 查找年龄在 18 到 30 岁之间的用户
db.users.find({ age: { $gte: 18, $lte: 30 } });
- and 查询
// 查找年龄大于 25 岁且性别为 "男" 的用户
db.users.find({ $and: [{ age: { $gt: 25 } }, { gender: "男" }] });
- or查询
// 查找年龄小于 18 岁或大于 60 岁的用户
db.users.find({ $or: [{ age: { $lt: 18 } }, { age: { $gt: 60 } }] });
- not 查询
// 查询 age 不等于 25 的文档
db.users.find({age: { $not: { $eq: 25 } }
});// 等价于
db.users.find({age: { $ne: 25 }
});
- nor 查询
nor可以理解为多个not条件的组合
// 查询年龄不是 25 且地址不是Shenzhen的文档
db.users.find({$nor: [{ age: 25 },{ address: "Shenzhen" }]
});// 查询年龄不是 25 或 30 的用户, 且地址不是Shenzhen的文档
db.users.find({$nor: [{ age: 25 },{ age: 30},{ address: "Shenzhen" }]
});
- in 查询
// 查询年龄是 25 和 35 的文档
db.users.find({ age: { $in: [25, 35] } });
- nin 查询
// 查询年龄不是是 25 和 35 的文档
db.users.find({ age: { $nin: [25, 35] } });
- 正则查询 regex
// 查询 name 中包含 Tom 的文档
db.users.find({name: { $regex: "Tom" }
});// i 忽略大小写
db.users.find({name: { $regex: "tom", $options: "i" }
});
// 匹配电子邮件以 "dave" 开头的用户
db.users.find({email: { $regex: "^dave" }
});// 匹配电子邮件以 "domain.com" 结尾的用户
db.users.find({email: { $regex: "domain\\.com$" }
});// 多行模式,匹配电子邮件包含 "example" 或 "domain" 的用户
db.users.find({email: { $regex: "example|domain" }
});
2.2、内嵌文档查询
// 数据结构
[{"_id": 1,"name": "Alice","age": 30,"address": {"street": "123 Elm St","city": "New York","state": "NY","zip": "10001"}},{"_id": 2,"name": "Bob","age": 25,"address": {"street": "456 Oak St","city": "Los Angeles","state": "CA","zip": "90001"}}
]// 查询语句,查找有地址的用户,并且地址的城市是 "New York"
db.users.find({ "address.city": "New York" });
2.3、数组文档查询
$elemMatch:匹配数组中满足条件的元素
// 数据结构
[{"_id": 1,"name": "Alice","age": 30,"friends": [{ "name": "Bob", "age": 25 },{ "name": "Charlie", "age": 32 }]},{"_id": 2,"name": "David","age": 28,"friends": [{ "name": "Eve", "age": 22 },{ "name": "Frank", "age": 29 }]}
]// 查询语句,查找friends中包含年龄大于 30 岁的用户
db.users.find({ "friends": { $elemMatch: { age: { $gt: 30 } } } })
2.4、去重查询
// 给 age 字段去重
db.users.distinct("age");// age 大于 25 的用户的去重 name 字段
db.users.distinct("name", { age: { $gt: 25 } });
2.5、查询排序 sort
// 使用关键字sort,按照 age 升序排序
db.users.find().sort({ age: 1 });// 按照 age 降序排序
db.users.find().sort({ age: -1 });
2.6、分页查询
// 使用 limit 关键字,返回前5条数据
db.users.find().limit(5);// 分页查询,跳过前 5 个文档,并返回接下来的 5 个文档
db.users.find().skip(5).limit(5)
2.7、指定列投影查询返回
- 查询只返回指定列 投影
// 返回 name age,不返回_id, 0表示不返回,1表示返回
db.users.find({}, { name: 1, age: 1, _id: 0 });
- 查询不返回指定的列 投影
// 不返回 name, 其他字段都返回,0表示不返回,1表示返回
db.users.find({}, { name: 0 });
2.8、查询统计个数 count
// 查询集合中的所有文档数量
db.users.count();// 查询年龄大于 30 的文档的个数
db.users.count({ age: { $gt: 10 } });
db.users.find({ age: { $gt: 10 } }).count()// 这里要使用聚合aggregate,$match的意思和find一样
db.<collection_name>.aggregate([{ $match: { name: "Tom" } },{ $count: "total" }
])
3、聚合查询
聚合操作符
符号 | 说明 |
---|---|
$sum | 计算和 |
$avg | 计算平均值 |
$min | 计算最小值 |
$max | 计算最大值 |
$first | 取每组中的第一个文档 |
$last | 取每组中的最后一个文档 |
$push | 将每组中的某个值添加到数组中 |
$addToSet | 将每组中的唯一值添加到数组中(去重) |
$count | 计算文档数量 |
算数操作符
符号 | 说明 |
---|---|
$add | 两个数、日期、时间相加 |
$subtract | 两个数、日期、时间相减 |
$multiply | 两个数相乘 |
$divide | 两个数相除 |
$mod | 两个数取余 |
$abs | 数字的绝对值 |
$ceil | 数字向上取整 |
$floor | 数字向下取整 |
$exp | 返回 e(自然对数的底数)取指定数字次方的值 |
$ln | 数字的自然对数 |
$log | 数字以指定底数为底的对数 |
$log10 | 数字以10为底的对数 |
$pow | 指定数字的指定次方的值 |
$sqrt | 数字的平方根 |
$trunc | 数字截断为整数的值(删除小数部分) |
- $match
$match 是 MongoDB 聚合管道中的一个重要阶段,用于筛选文档,仅输出符合指定条件的文档。它的作用类似于 find 操作,但它是聚合管道的一部分,通常用于数据预处理和过滤,以便后续阶段能够处理更少、更相关的数据。
语法:
db.<collection_name>.aggregate([{ $match: { <query> } }
])// <query>:标准的查询条件,类似于 find 方法中的查询条件。
3.1、查询用户表中name=tom的文档
db.users.aggregate([{ $match: { name: "Tom" } }
])
3.2、查询订单表中 amount大于 300 的订单
db.orders.aggregate([{ $match: { amount: { $gt: 300 } } }
])
3.3、查询订单中 status = 1 并且 amount 大于 300 的订单
db.orders.aggregate([{ $match: { $and: [ { status: "A" }, { amount: { $gt: 300 } } ] } }
])
3.4、内嵌查询
db.orders.aggregate([{ $match: { "address.city": "New York" } }
])
3.5、查找 amount 大于 200 的订单,并按 amount 降序排序
db.orders.aggregate([{ $match: { amount: { $gt: 200 } } },{ $sort: { amount: -1 } }
])
4、分组查询group
有sales集合数据如下:
[{ "_id": 1, "item": "apple", "price": 10, "quantity": 2, "date": "2023-01-01" },{ "_id": 2, "item": "banana", "price": 5, "quantity": 10, "date": "2023-01-01" },{ "_id": 3, "item": "apple", "price": 10, "quantity": 5, "date": "2023-01-02" },{ "_id": 4, "item": "banana", "price": 5, "quantity": 7, "date": "2023-01-02" },{ "_id": 5, "item": "orange", "price": 8, "quantity": 8, "date": "2023-01-03" }
]
4.1、按 item 字段分组并计算总销售量
db.sales.aggregate([{$group: {_id: "$item",totalQuantity: { $sum: "$quantity" }}}
])
结果
[{ "_id": "apple", "totalQuantity": 7 },{ "_id": "banana", "totalQuantity": 17 },{ "_id": "orange", "totalQuantity": 8 }
]
4.2、按 date 字段分组并计算总销售额
db.sales.aggregate([{$group: {_id: "$date",totalSales: { $sum: { $multiply: ["$price", "$quantity"] } }}}
])
结果:
[{ "_id": "2023-01-01", "totalSales": 70 },{ "_id": "2023-01-02", "totalSales": 85 },{ "_id": "2023-01-03", "totalSales": 64 }
]
4.3、按 item 分组,并计算每种商品的平均价格和总销售量
db.sales.aggregate([{$group: {_id: "$item",avgPrice: { $avg: "$price" },totalQuantity: { $sum: "$quantity" }}}
])
结果:
[{ "_id": "apple", "avgPrice": 10, "totalQuantity": 7 },{ "_id": "banana", "avgPrice": 5, "totalQuantity": 17 },{ "_id": "orange", "avgPrice": 8, "totalQuantity": 8 }
]
4.4、按 item 分组,并创建一个包含所有销售日期的数组
db.sales.aggregate([{$group: {_id: "$item",dates: { $push: "$date" }}}
])
结果:
[{ "_id": "apple", "dates": ["2023-01-01", "2023-01-02"] },{ "_id": "banana", "dates": ["2023-01-01", "2023-01-02"] },{ "_id": "orange", "dates": ["2023-01-03"] }
]
4.5、按 item 分组,并创建一个包含唯一销售日期的数组
db.sales.aggregate([{$group: {_id: "$item",uniqueDates: { $addToSet: "$date" }}}
])
结果:
[{ "_id": "apple", "uniqueDates": ["2023-01-01", "2023-01-02"] },{ "_id": "banana", "uniqueDates": ["2023-01-01", "2023-01-02"] },{ "_id": "orange", "uniqueDates": ["2023-01-03"] }
]
4.6、查询结果后再分组
db.sales.aggregate([{ $match: { item: "apple" } },{$group: {_id: "$date",totalQuantity: { $sum: "$quantity" },avgPrice: { $avg: "$price" }}}
])
结果:
[{ "_id": "2023-01-01", "totalQuantity": 2, "avgPrice": 10 },{ "_id": "2023-01-02", "totalQuantity": 5, "avgPrice": 10 }
]
4.7、对分组结果进行排序
db.sales.aggregate([{$group: {_id: "$item",totalQuantity: { $sum: "$quantity" }}},{ $sort: { totalQuantity: -1 } }
])
结果:
[{ "_id": "banana", "totalQuantity": 17 },{ "_id": "apple", "totalQuantity": 7 },{ "_id": "orange", "totalQuantity": 8 }
]
2、插入
- 插入单个文档(插入一条数据) insertOne
// 语法
db.<collection_name>.insertOne({})// 示例
db.users.insertOne({name: "Tom",age: 30,email: "tom@example.com"
})
- 插入多个文档(插入多条数据) insertMany
// 语法
db.<collection_name>.insertMany([{}, {}
])// 示例
db.orders.insertMany([{ item: "book", qty: 10, price: 15 },{ item: "pen", qty: 20, price: 1.5 }
])
3、修改
- 更新一条文档(修改一条数据) updateOne
- 更新 name 为 “Alice” 的文档的 age 字段
db.users.updateOne({ name: "Alice" },{ $set: { age: 26 } }
)
- 如果没有找到文档,则插入一个新文档 upsert: true
db.users.updateOne({ name: "Charlie" },{ $set: { age: 35 }, $setOnInsert: { createdAt: new Date() } },{ upsert: true }
)
- 更新多个文档(修改多条数据) updateMany
1.将所有 age 小于 30 的用户的 status 更新为 “young”
db.users.updateMany({ age: { $lt: 30 } },{ $set: { status: "young" } }
)
2.如果没有找到文档,则插入一个新文档 upsert: true
db.users.updateMany({ status: "inactive" },{ $set: { status: "active" } },{ upsert: true }
)
- 替换文档中的所有字段值 replaceOne
1.用新文档替换 name 为 “Alice” 的文档
db.users.replaceOne({ name: "Alice" },{ name: "Alice", age: 27, status: "active" }
)
2.如果没有找到文档,则插入一个新文档 upsert: true
db.users.replaceOne({ name: "David" },{ name: "David", age: 40, status: "new" },{ upsert: true }
)
- 重命名字段 $rename
db.users.updateOne({ name: "Alice" },{ $rename: { "address.city": "address.town" } }
)
- 向文档中添加时间字段,时间为当前时间 $currentDate
db.users.updateOne({ name: "Alice" },{ $currentDate: { create_time: true } }
)
- 向文档中的数组插入数据 $addToSet
db.users.updateOne({ name: "Tom" },{ $addToSet: { address: "Shenzhen" } }
)
- 从文档数组中移除数据 $pull
db.users.updateOne({ name: "Tom" },{ $pull: { address: "Shenzhen" } }
)
4、删除
- 删除一个文档(删除一条数据) deleteOne
db.users.deleteOne({ name: "Tom" })
- 删除多个文档(删除多条数据) deleteMany
// 删除所有 age 小于 30 的文档
db.users.deleteMany({ age: { $lt: 30 } })
- 删除集合,包括集合中的所有文档(删除表)
// 语法
db.<collection_name>.drop()// 示例
db.users.drop()
- 删除集合中的所有文档,保留集合
db.users.deleteMany({})
5、计划查询
有users集合数据如下:
[{ "_id": 1, "name": "Alice", "age": 25, "address": { "city": "New York", "state": "NY" }, "score": 80 },{ "_id": 2, "name": "Bob", "age": 30, "address": { "city": "Los Angeles", "state": "CA" }, "score": 90 }
]
- 查询结果只返回指定字段 投影
db.users.aggregate([{$project: {name: 1,age: 1}}
])
结果:
[{ "_id": 1, "name": "Alice", "age": 25 },{ "_id": 2, "name": "Bob", "age": 30 }
]
- 查询结果不返回指定字段 投影
db.users.aggregate([{$project: {address: 0}}
])
结果:
[{ "_id": 1, "name": "Alice", "age": 25, "score": 80 },{ "_id": 2, "name": "Bob", "age": 30, "score": 90 }
]
- 重命名字段
db.users.aggregate([{$project: {username: "$name",age: 1}}
])
结果:
[{ "_id": 1, "username": "Alice", "age": 25 },{ "_id": 2, "username": "Bob", "age": 30 }
]
- 计算新字段
计算新的字段 discountedScore,其值为 score 的 90%:
db.users.aggregate([{$project: {name: 1,age: 1,discountedScore: { $multiply: ["$score", 0.9] }}}
])
结果:
[{ "_id": 1, "name": "Alice", "age": 25, "discountedScore": 72 },{ "_id": 2, "name": "Bob", "age": 30, "discountedScore": 81 }
]
- 只显示指定的嵌套字段
db.users.aggregate([{$project: {name: 1,age: 1,"address.city": 1}}
])结果:```java
[{ "_id": 1, "name": "Alice", "age": 25, "address": { "city": "New York" } },{ "_id": 2, "name": "Bob", "age": 30, "address": { "city": "Los Angeles" } }
]
6、多表连接查询 $lookup
- 两张集合,关联查询
有两个集合 orders 订单表和 products 产品表,orders 集合中的文档中的 productId 字段,指向 products 集合中 _id 字段,数据内容如下:
// orders 集合
{ "_id": 1, "productId": 101, "quantity": 2 }
{ "_id": 2, "productId": 102, "quantity": 1 }// products 集合
{ "_id": 101, "name": "Widget", "price": 19.99 }
{ "_id": 102, "name": "Gadget", "price": 29.99 }
内联查询语句:
db.orders.aggregate([{$lookup: {from: "products",localField: "productId",foreignField: "_id",as: "productDetails"}}
])
参数说明:
db.orders.aggregate([…]):aggregate 方法在 orders 集合上运行。这意味着整个聚合管道操作是针对 orders 集合的。
from:指定要连接的目标集合的名称。示例中我们是从 products 集合中查询关联数据。
localField:指定当前集合(orders源集合)中用于连接的字段名称。示例中和products关联的是productId字段。
foreignField:指定目标集合(from 集合)中用于连接的字段名称,示例中和orders关联的是_id字段。
- 三张集合,关联查询
orders 订单表和 products 表关联,products 表和 categories 关联,数据内容如下:
// orders 订单表
{ "_id": 1, "productId": 101, "quantity": 2 }
{ "_id": 2, "productId": 102, "quantity": 1 }// products 产品表
{ "_id": 101, "categoryId": 201, "name": "Widget" }
{ "_id": 102, "categoryId": 202, "name": "Gadget" }// categories 产品类别表
{ "_id": 201, "name": "Electronics" }
{ "_id": 202, "name": "Home Goods" }
内联查询语句:
db.orders.aggregate([{$lookup: {from: "products",localField: "productId",foreignField: "_id",as: "productDetails"}},{$lookup: {from: "categories",localField: "productDetails.categoryId",foreignField: "_id",as: "productDetails.categoryDetails"}}
])
- 外联查询 $unwind
$unwind 是 MongoDB 聚合管道中的另一个操作符,用于将数组字段展开成多个文档。如果在使用 $lookup 时,目标集合的字段是一个数组(如上面的例子中 productDetails 是一个数组),使用 $unwind 可以将每个数组元素展开为独立的文档。
示例一:配置 $lookup 使用
db.orders.aggregate([{$lookup: {from: "products",localField: "productId",foreignField: "_id",as: "productDetails"}},{$unwind: "$productDetails"}
])
示例二:展开数组
有如下基础数据:
db.users.insertMany([{ _id: 1, name: "Alice", address: ["广州", "北京", "杭州"] },{ _id: 2, name: "Bob", address: ["上海", "武汉"] },{ _id: 3, name: "Charlie", address: [] }
])
外联查询语句
db.users.aggregate([{ $unwind: "$address" }
])
查询结果
[{ "_id": 1, "name": "Alice", "address": "广州" },{ "_id": 1, "name": "Alice", "address": "北京" },{ "_id": 1, "name": "Alice", "address": "杭州" },{ "_id": 2, "name": "Bob", "address": "上海" },{ "_id": 2, "name": "Bob", "address": "武汉" }
]
相关文章:
Mongodb命令大全
Mongodb命令大全 一、数据库相关命令二、集合相关命令三、文档(数据)相关命令1、_id 字段说明2、查询2.1、 查询操作符2.2、内嵌文档查询2.3、数组文档查询2.4、去重查询2.5、查询排序 sort2.6、分页查询2.7、指定列投影查询返回2.8、查询统计个数 count 3、聚合查询3.1、查询用…...

宇视设备视频平台EasyCVR视频融合平台果园/鱼塘/养殖场/菜园有电没网视频监控方案
在那些有电无网的偏远地区,如果园、鱼塘、养殖场或菜园,视频监控的实现面临着独特的挑战。宇视设备视频平台EasyCVR提供了一种创新的解决方案,通过结合太阳能供电和4G摄像头技术,有效地解决了这些场景下的监控需求。 在有电没网的…...
面试题:ABCD四个线程,A线程最后执行
我觉得是一个很高频的面试题,ABCD四个线程,A线程要等到BCD线程执行完再执行,怎么做 因为我刚复习完AQS,所以立马想到了CountDownLatch,但是看面试官反应他最想听到的应该是join方法,所以面试后就总结了几种…...

代码随想录算法训练营第46期Day43
leetcode.322零钱兑换 class Solution { public: //无限个硬币->完全背包int coinChange(vector<int>& coins, int amount) {vector<int> dp(10010,INT_MAX);//dp代表的在某个数值下最小的硬币数,要求是最小的硬币数,所以初始值要尽可…...
前端处理API接口故障:多接口自动切换的实现方案
因为在开发APP,一个接口如果不通(被挂了)又不能改了重新打包让用户再下载软件更新,所以避免这种情况,跟后端讨论多备用接口地址自动切换的方案,自动切换到备用的接口地址,并保证后续所有的请求都…...
多租户架构的全景分析(是什么?基本概念、实现策略、资源管理和隔离、数据安全与隔离、性能优化、扩展性与升级、案例研究)
文章目录 1. 多租户的基本概念2. 多租户的实现策略2.1 独立数据库模式2.2 共享数据库-独立Schema模式2.3 共享数据库-共享Schema模式 3. 资源管理和隔离4. 数据安全与隔离5. 性能优化6. 扩展性与升级7. 案例研究总结 多租户架构在云计算和SaaS应用中越来越流行,因为…...
Git使用问题汇总附带解决方法(持续更新)
Git使用问题汇总附带解决方法 一 git pull 代码时报错: Auto packing the repository in background for optimum performance. See “git help gc“ 一 git pull 代码时报错: Auto packing the repository in background for optimum performance. See …...

Spring Boot驱动的植物健康监测革命
1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理植物健康系统的相关信息成为必然。开发合适…...
element 中 el-dialog 在不同的文件中使用
在实际中工作,我们经常需要使用 el-dialog 来做一个弹框的功能。最常见的就是在父组件中点击一个按纽,然后弹出一个框。而这个框就是子组件。同时,父子组件是分布在不同的文件中。 <!--父组件--> <template> <div> <…...
QT中采用QCustomPlot 实现将buffer中的数据绘制成折线图,并且图形随着数据更新而更新
QT中采用QCustomPlot 实现将buffer中的数据绘制成折线图,并且图形随着数据更新而更新 为了在 Qt 中将缓冲区的数据动态绘制成折线图,并随着数据的更新而实时更新,可以使用 QCustomPlot 或 Qt 自带的绘图功能,比如 QGraphicsView,或者在更简单的情况下使用 QPainter 在 QW…...

1688API商品详情接口如何获取
获取 1688API商品详情接口主要有以下步骤: 一、注册开发者账号: 访问 1688 开放平台,进行开发者账号注册。这是获取 API 接口使用权限的第一步,注册信息要确保真实准确。 二、了解接口规范和政策: 在 1688 开放平台…...
pytorch + d2l环境配置
文章目录 前言一、安装软件二、配置具体环境 前言 一直想写一篇 pytorch d2l的深度学习环境配置。但一直都不是很顺利,配置过很多次,都会遇到一些各种依赖项的兼容性问题。但这个是没有办法的,各种开源包都在不断维护过程中,版本…...

Go使用exec.Command() 执行脚本时出现:file or directory not found
使用 Go 提供的 exec.Command() 执行脚本时出现了未找到脚本的 bug,三个排查思路 : exec.Command(execName, args…) 脚本名字不允许相对路径 exec.Command(execName, args…) execName 只能有脚本名,不允许出现参数 如果你是使用 Windows …...
细节性知识(宏定义解析与宏的外部引用)
目录 一、问:#define N 50 中的N可以用来做运算比较吗? 二、宏定义怎么外部引用? 例子 总结 一、问:#define N 50 中的N可以用来做运算比较吗? 解析:在C语言中,#define N 50 是一个预处理指…...

面试中的JVM:结合经典书籍的深度解读
写在前面 🔥我把后端Java面试题做了一个汇总,有兴趣大家可以看看!这里👉 ⭐️在无数次的复习巩固中,我逐渐意识到一个问题:面对同样的面试题目,不同的资料来源往往给出了五花八门的解释&#…...

使用语音模块的开发智能家居产品(使用雷龙LSYT201B 语音模块)
在这篇博客中,我们将探讨如何使用 LSYT201B 语音模块 进行智能设备的语音交互开发。通过这个模块,我们可以实现智能设备的语音识别和控制功能,为用户带来更为便捷和现代的交互体验。 1. 语音模块介绍 LSYT201B 是一个基于“芯片算法”的语音…...
深入理解支持向量机:从基本原理到实际应用
第6章 支持向量机 在本章中,我们将深入探讨支持向量机(SVM)这一强大的分类算法。SVM在模式识别和机器学习领域广泛应用,尤其在处理高维数据时表现出色。我们将依次讨论间隔与支持向量、对偶问题、核函数、间隔与正则化、支持向量…...

每天一题:洛谷P2041分裂游戏
题目描述 有一个无限大的棋盘,棋盘左下角有一个大小为 n 的阶梯形区域,其中最左下角的那个格子里有一枚棋子。你每次可以把一枚棋子“分裂”成两枚棋子,分别放在原位置的上边一格和右边一格。(但如果目标位置已有棋子,…...

简单的 curl HTTP的POSTGET请求以及ip port连通性测试
简单的 curl HTTP的POST&GET请求以及ip port连通性测试 1. 需求 我们公司有一个演示项目,需要到客户那边进行项目部署,项目部署完成后我们需要进行项目后端接口的测试功能,但是由于客户那边么有条件安装类似于postman这种的测试工具&am…...

ubuntu下快捷键启动程序
背景:公司自开发的软件,经常需要启动,每次去找目录启动很麻烦,所以想快捷启动 方法1: 通过编辑.baserc启动 例如启动程序是toolA, 放在/home/user/software/目录下,那么在~/.baserc里面加入一行代码 al…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...