
它没有表但有Collection,没有行但有document
win=>Select模型 1024
linux=>epoll 65535 可能
暴露腾讯云端口
27017
docker下载镜像
启动容器
docker run -d --name mongo1 -p 27017:27017 mongo
javascript
[root@VM-4-7-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
71a59e454c0a mongo "docker-entrypoint.s..." 10 minutes ago Up 10 minutes 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp mongo1
[root@VM-4-7-centos ~]# docker exec -it 71 bash
71 表示容器id 71a59e454c0a
javascript
root@71a59e454c0a:/# mongosh
Current Mongosh Log ID: 69626a66daa6bcc0ce8de665
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.5.10
Using MongoDB: 8.2.3
Using Mongosh: 2.5.10
For mongosh info see: https://www.mongodb.com/docs/mongodb-shell/
To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.
------
The server generated these startup warnings when booting
2026-01-10T14:49:54.088+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
2026-01-10T14:49:54.196+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2026-01-10T14:49:54.196+00:00: For customers running the current memory allocator, we suggest changing the contents of the following sysfsFile
2026-01-10T14:49:54.196+00:00: We suggest setting the contents of sysfsFile to 0.
2026-01-10T14:49:54.196+00:00: vm.max_map_count is too low
------
test>
javascript
test> show databases
admin 40.00 KiB
config 60.00 KiB
local 40.00 KiB
test>
javascript
test> use test
already on db test
test> show databases
admin 40.00 KiB
config 60.00 KiB
local 40.00 KiB -----没显示test
test> use test
already on db test
test> db.createCollection("userinfo") --- 创建
{ ok: 1 }
test> show databases
admin 40.00 KiB
config 60.00 KiB
local 40.00 KiB
test 8.00 KiB -----显示了
test>

数据库crud
插入
db.userinfo.insert({name:"贾宝玉",age:25,gender:"男",address:"贾府"}); // 插入文档(指定_id)

db.userinfo.insert({id:1,name:"贾宝玉",age:25,gender:"男",address:"贾府",description:"大贾"});

db.userinfo.insert({id:1,name:"贾宝玉",description:"大贾"}); // 查询集合中所有文档
显示数据库
db.userinfo.find({});
javascript
// 修正语法错误,循环插入10条数据
for (var i = 1; i <= 10; i++) {
db.userinfo.insert({ name: "clar" + i, age: 31 });
}
// 批量生成10条数据并插入
var dataList = [];
for (var i = 1; i <= 10; i++) {
dataList.push({ name: "clar" + i, age: 31 });
}
db.userinfo.insertMany(dataList);
查询前 N 条数据
javascript
运行
db.集合名称.find({}).limit(条数)
作用:只查询结果中的前 N 条数据(用于分页或限制返回数量)。
示例:db.userinfo.find({}).limit(5) → 查询userinfo集合的前 5 条数据。
条件查询(指定字段匹配 + 字段过滤)


db.userinfo.find({name:"clay1",age:1},{name:1,_id:0})
语法结构:find(查询条件, 字段投影)
查询条件(第一个参数):{name:"clay1",age:1} → 只查询name为clay1且age为 1 的文档。
字段投影(第二个参数):{name:1,_id:0} → 控制返回的字段:
字段名:1 → 显示该字段;
字段名:0 → 隐藏该字段(_id默认显示,需显式设为0才会隐藏)。
该示例的实际效果:查询name=clay1且age=1的文档,只返回name字段,不返回_id。
javascript
db.cl.find({}).sort({age:1}) --升序
db.cl.find({}).sort({age:-1}) -- 降序
db.cl.find({}).sort({age:1}).skip(2).limit(2) --跳过排序后前两条取两条
javascript
db.cl.find({}).sort({age:-1})

javascript
db.cl.insert({name: "8888", age: 1, addr: "address", flag: true})
db.cl.update({name: "8888"}, {name: "99"})----------------旧版本可能会去掉其他字段,不建议
MongoDB 4.2+ 版本强制要求:更新内容必须使用$操作符(如$set)|
|
db.userinfo.update(
{name: "clar1"}, // 查询条件:匹配name为clar1的文档
{$set: {name: "99"}} // 更新内容:仅修改name字段为99,保留其他字段
)
db.cl.update(
{name: "8888"}, // 查询条件:匹配name为"8888"的文档
{
$set: {name: "zs44"}, // 修改name字段值为"zs44"
$inc: {age: 10}, // 将age字段的值递增10(原age=1 → 变为11)
$rename: {addr: "address"}, // 将字段名"addr"重命名为"address"
$unset: {flag: ""} // 删除flag字段
}
)
查询结果:
{ "_id": ObjectId("..."), "name": "zs44", "age": 11, "address": "address" }


javascript
统计男生、女生的总年龄
db.cl.aggregate([
{
$group: {
_id: "$sex", // 按sex字段分组(男生/女生)
rs: { $sum: "$age" } // 计算每组的age字段总和
}
}
])
[{ "_id": "男", "rs": 250 }, { "_id": "女", "rs": 220 }]
-------------
统计男生、女生的总人数
db.cl.aggregate([
{
$group: {
_id: "$sex", // 按sex分组
rs: { $sum: 1 } // 每组计数(每匹配一条数据,累加1)
}
}
])
[{ "_id": "男", "rs": 10 }, { "_id": "女", "rs": 8 }]
-----------
求学生总数和平均年龄
db.cl.aggregate([
{
$group: {
_id: null, // _id为null表示不分组,统计整个集合
total_num: { $sum: 1 }, // 总人数
total_avg: { $avg: "$age" } // 年龄的平均值
}
}
])
[{ "_id": null, "total_num": 18, "total_avg": 26.11 }]
----------
db.cl.aggregate([
{ $group: { _id: "$sex", rs: { $sum: 1 } } }, // 按sex分组计数
{ $sort: { rs: 1 } } // 按人数(rs字段)升序排列
])
[{ "_id": "女", "rs": 8 }, { "_id": "男", "rs": 10 }]

MongoDB.Driver对接Net6
javascript
using MongoDB.Driver;
using MongoDB.Bson;
using System;
namespace MongoDBDemo
{
public class JsonOperation
{
--order 表名/集合
--document --row
public void Show()
{
// 1. 创建MongoDB客户端,指定连接地址
var client = new MongoClient("mongodb://192.168.1.12:27017");
// 2. 获取指定数据库(不存在自动创建)
var database = client.GetDatabase("mongodbDemo");
// 3. 构建要插入的文档对象 - 解析JSON字符串为BsonDocument
var document = BsonDocument.Parse("{a:1, b:[{c:1}], c:'ff'}");
// 4. 获取集合,插入单条文档(集合不存在自动创建)
database.GetCollection<BsonDocument>("order").InsertOne(document);
// 5. 查询集合中 a=1 的所有文档,返回List集合
var info = database.GetCollection<BsonDocument>("order").Find("{a:1}").ToList();
// 6. 操作成功提示
Console.WriteLine("ok");
}
}
}
javascript
using MongoDB.Driver;
using System;
// 泛型数据库操作类,约束T为类且具有无参构造函数
public class DBbase<T> where T : class, new()
{
// MongoDB客户端、数据库、集合对象
MongoClient client;
IMongoDatabase database;
public IMongoCollection<T> collection;
// 构造函数:初始化连接与集合
public DBbase()
{
// 1. 初始化MongoDB客户端(连接地址可替换为实际地址)
client = new MongoClient("mongodb://192.168.1.12:27017");
// 2. 获取指定数据库(此处为"test"库)
database = client.GetDatabase("test");
// 3. 获取泛型对应的集合(集合名自动取T的类名小写)
Type type = typeof(T);
collection = database.GetCollection<T>(type.Name.ToLower());
}
// 删除数据库
public void DropDatabase()
{
client.DropDatabase("test");
}
// 插入单条数据
public void InsertOne(T model)
{
collection.InsertOne(model);
}
// 批量插入数据
public void InsertMany(params T[] modes)
{
collection.InsertMany(modes);
}
// 查询:返回可查询的泛型集合
public IMongoQueryable<T> Select()
{
return collection.AsQueryable<T>();
}
// 分页查询(指定页码、页大小)
public IMongoQueryable<T> Select(int pageIndex, int pageSize)
{
return collection.AsQueryable<T>()
.Skip(pageSize * (pageIndex - 1))
.Take(pageSize);
}
// 条件+排序+分页查询
public IMongoQueryable<T> Select(Expression<Func<T, bool>> predicate,
Expression<Func<T, object>> keySelector,
int pageIndex, int pageSize)
{
return collection.AsQueryable<T>()
.Where(predicate)
.OrderBy(keySelector)
.Skip(pageSize * (pageIndex - 1))
.Take(pageSize);
}
// 批量更新
public void UpdateMany(Expression<Func<T, bool>> filter, UpdateDefinition<T> update)
{
collection.UpdateMany(filter, update);
}
// 单条替换更新(覆盖文档)
public void UpdateOne(Expression<Func<T, bool>> filter, T update)
{
collection.ReplaceOne(filter, update);
}
// 批量删除
public void DeleteMany(Expression<Func<T, bool>> filter)
{
collection.DeleteMany(filter);
}
}
javascript
using System;
// 部门信息实体类
public class DeptInfo
{
public int DeptId { get; set; }
public string DeptName { get; set; }
}
// 用户信息实体类
public class Userinfo
{
public string Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public int Age { get; set; }
public string Sex { get; set; }
public string Admin { get; set; }
public DeptInfo DeptInfo { get; set; }
}
// Linq操作类
public class LinqOperation
{
// 初始化DBbase泛型实例(操作Userinfo集合)
static DBbase<Userinfo> dBbase = new DBbase<Userinfo>();
// 删除数据库
public static void DropDatabase()
{
dBbase.DropDatabase();
}
// 插入单条用户数据
public static void InsertOne()
{
dBbase.InsertOne(new Userinfo()
{
Id = Guid.NewGuid().ToString(),
Name = "诸葛亮",
Address = "蜀国",
Age = 27,
Sex = "男",
Admin = "admin",
DeptInfo = new DeptInfo()
{
DeptId = 1,
DeptName = "蜀国集团"
}
});
dBbase.InsertOne(new Userinfo()
{
Id = Guid.NewGuid().ToString(),
Name = "荀彧",
Address = "魏国",
Age = 47,
Sex = "男",
DeptInfo = new DeptInfo()
{
DeptId = 2,
DeptName = "魏国集团"
}
});
Console.WriteLine("写入完成");
}
public static void InsertMany()
{
// 周瑜
var zhouyu = new Userinfo()
{
Id = Guid.NewGuid().ToString(),
Name = "周瑜",
Address = "吴国",
Age = 32,
Sex = "男",
DeptInfo = new DeptInfo() { DeptId = 3, DeptName = "吴国集团" }
};
// 大乔
var daqiao = new Userinfo()
{
Id = Guid.NewGuid().ToString(),
Name = "大乔",
Address = "吴国",
Age = 14,
Sex = "女",
DeptInfo = new DeptInfo() { DeptId = 3, DeptName = "吴国集团" }
};
// 执行批量插入
dBbase.InsertMany(zhouyu, daqiao);
}
// 分页查询(条件+排序+分页)
public static void GetPage()
{
// 1. 按条件(Sex="男")、排序(按Age)、分页(第2页,每页2条)查询
var pageList = dBbase.Select(
m => m.Sex == "男", // 筛选条件:性别为男
m => m.Age, // 排序字段:按年龄
2, 2 // 页码、页大小
);
// 遍历输出结果
foreach (var item in pageList)
{
Console.WriteLine(item.Name + ":" + item.Age);
}
// 2. Linq语法查询:性别为男 且 年龄>18的用户
var query = from p in dBbase.collection.AsQueryable()
where (p.Sex == "男") && p.Age > 18
select p;
// 遍历输出结果
foreach (var item in query)
{
Console.WriteLine(item.Name + ":" + item.Age);
}
}
// 更新单条数据
public static void Update()
{
// 查询Name为"大乔"的用户
var daqiaod = dBbase.Select().Where(m => m.Name == "大乔").FirstOrDefault();
if (daqiaod != null)
{
// 修改年龄为18
daqiaod.Age = 18;
// 执行更新(按Id匹配)
dBbase.UpdateOne(m => m.Id == daqiaod.Id, daqiaod);
Console.WriteLine("修改完成");
}
}
// 批量删除
public static void DeleteMany()
{
// 删除Name为"大乔"的所有用户
dBbase.DeleteMany(m => m.Name == "大乔");
Console.WriteLine("删除完成");
// 全部删除(条件恒成立)
dBbase.DeleteMany(m => 1 == 1);
Console.WriteLine("全部删除完成");
}
}