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…...
Yii2 init 初始化脚本分析
脚本目的: init 脚本主要的作用是:从 environments 目录中复制配置文件,确保应用适配不同环境(例如开发、生产环境等)。 工作流程: 获取 $_SERVER 的 argv 参数 加载 environments/index.php 文件&#…...
深入理解gPTP时间同步过程
泛化精确时间协议(gPTP)是一个用于实现精确时间同步的协议,特别适用于分布式系统中需要高度协调的操作,比如汽车电子、工业自动化等。 gPTP通过同步主节点(Time Master)和从节点(Time Slave)的时钟,实现全局一致的时间参考。 以下是gPTP实现主从时间同步的详细过程:…...
基于阿里云服务的移动应用日志管理方案—日志的上传、下载、存档等
前言 如题,基于阿里云服务(ECS、OSS)实现 APP 的用户日志上传以及日志下载的功能,提高用户反馈问题到研发去分析、定位、解决问题的整个工作流的效率。 术语 ECS: 云服务器ECS(Elastic Compute Service)…...
Python浪漫之画星星
效果图(动态的哦!): 完整代码(上教程): import turtle import random import time # 导入time模块# 创建一个画布 screen turtle.Screen() screen.bgcolor("red")# 创建一个海龟&a…...
Android使用协程实现自定义Toast弹框
Android使用协程实现自定义Toast弹框 最近有个消息提示需要显示10s,刚开始使用协程写了一个shoowToast方法,传入消息内容、显示时间和toast显示类型即可,以为能满足需求,结果测试说只有5s,查看日志和源码发现Android系统中Toa…...
git diff命令详解
git diff 是 Git 中非常常用的命令,用于比较不同版本的文件改动。可以比较工作区、暂存区、或者提交之间的差异。下面是对 git diff 常用场景的详细解释: 1. git diff 当你执行 git diff 时,它会显示工作区与暂存区之间的差异,也…...
Vue 插槽:组件通信的“隐形通道”
在 Vue 中,插槽(slot)是实现组件内容分发的机制,允许我们将子组件的内容传递给父组件,从而提升组件的可复用性和灵活性。插槽的本质是通过将父组件内容传递到子组件指定的插槽位置,使得子组件在渲染时可以动…...
react1816中的setState同步还是异步的深层分析
setState 是 react 中更新 UI 的唯一方法,其内部实现原理如下: 调用 setState 函数时,React 将传入的参数对象加入到组件的更新队列中。React 会调度一次更新(reconciliation),在调度过程中,Re…...
【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第七篇-体积纹理绘制】
我们前几篇已经完成了渲染部分,现在终于开始做动态绘制功能了 之前使用的是这样一个体积雾的切片图,那么现在要做的就是动态编辑它 首先,让我们简单了解一下它是如何运作的: 开始绘制画布以渲染目标,并将材质绘制到画…...
Linux的环境搭建
目录 1、linux的简单介绍 2、搭建linux环境 2.1 linux的环境安装 2.2 使用Xshell远程登入linux 2.2.1 Xshell免密登入 2.3 windows与Xshell与linux云服务器的关系 1、linux的简单介绍 linux操作系统 为 部分汇编 C语言编写 的操作系统 源代码公开(开源),官…...
织梦云建站系统/建网站需要哪些步骤
我发现我在工作中有一个毛病,只要工作一来就是一堆的时候,我就感觉这么多,怎么安排捏?有点不知所措!然后手头上的工作就停下来了,就觉得好忙好忙,然后就好乱好乱,后来一想不着急我后…...
建设德育网站的意义/广告推广系统
转载于:https://blog.51cto.com/ceshi/167991...
室内装饰设计师证书/seo专员岗位要求
UITextField属性 0. enablesReturnKeyAutomatically 默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的。 1.borderStyle 设置边框样式,只有设置了才会显示边框样式 text.borderStyle UITextBorderStyleRounded…...
视频网站建设需要多少钱/黄页网络的推广网站有哪些
文章目录引言一、基本概念1.读写分离(1) 什么是读写分离(2) 为什么要读写分离(3) 什么时候要读写分离(4) 主从复制与读写分离2. MySQL 主从复制(1) mysql 支持的复制类型(2) 主从复制的工作过程(3) mysql 主从复制高延迟的原因(4) mysql 主从复制高延迟的解决办法3. 常见的 MyS…...
wordpress自动更新表格/怎么弄一个网站平台
param参数ajax param()方法 语法作用:param() 方法创建数组或对象的序列化表示。该序列化值可在进行 AJAX 请求时在 URL 查询字符串中使用。语法:jQuery.param(object,traditional)参数:参数描述object要进行序列化的数组或对象。traditional…...
做网站送的企业邮箱能用吗/国内永久免费域名注册
1.面向过程的思维方式: 就是把解决问题的关注点,放到解决问题的每一个详细的步骤上面! 面向对象的思维方式:(面向对象就是一种思维方式,与代码关系不大) 就是把解决问题的关注点,放到…...