Mongodb 数据库查询语句 条件查询
创始人
2025-05-28 14:56:08

C# 引用驱动程序 MongoDB.Driver

建立连接

 private static  MongoClient client = new MongoClient("mongodb://127.0.0.1:27017");
        //获取指定数据库
 private static IMongoDatabase db = client.GetDatabase("DPdate");

Mongodb有一个特性,你可以不用先建数据库和集合,数据库会自行检查,如果没有就新建。

IMongoCollection<> collection = dbBase.GetCollection<>("Class"); //获取集合

也可以自动序列化 自己建model实体

IMongoCollection collection = dbBase.GetCollection("Class");

Linq 语法 查询

var schoolClass = collection.Find(n => n.ClassName == "一年级").FirstOrDefault();
var schoolClass2 = collection.AsQueryable().Where(n => n.ClassName == "一年级").FirstOrDefault();
var schoolClass3 = collection.Find(new BsonDocument("ClassName", "一年级")).FirstOrDefault();

Mongodb驱动程序还支持异步方法,根据命名约定,很多方法相应的Async结尾的,都是异步方法。

var schoolClass = await collection.Find(n => n.ClassName == "一年级").FirstOrDefaultAsync();
var schoolClass2 = await  collection.AsQueryable().Where(n => n.ClassName == "一年级").FirstOrDefaultAsync();
var schoolClass3 = await  collection.Find(new BsonDocument("ClassName", "一年级")).FirstOrDefaultAsync();

增加-

IMongoCollection collection = dbBase.GetCollection("Class");
//写入单个
collection.InsertOne(new Class
{ClassName = "二年级",StudentItems = new List{new Student{Age=10,Name="李明",Sex="男" },new Student{Age=12,Name="小红",Sex="女" }}
});
//批量写入
collection.InsertMany(new List
{new Class{ClassName = "二年级",StudentItems = new List{new Student{Age=10,Name="李明",Sex="男" },new Student{Age=12,Name="小红",Sex="女" }}}
});
IMongoCollection collection = dbBase.GetCollection("Class");
//写入单个
collection.InsertOne(new BsonDocument {{"ClassName","二年级" },{"StudentItems",new BsonArray{new BsonDocument { { "Age", 10 },{ "Name", "李明" },{ "Sex", "男" } }}}
});
//批量写入
collection.InsertMany(new List
{new BsonDocument {{"ClassName","二年级" },{"StudentItems",new BsonArray{new BsonDocument { { "Age", 10 },{ "Name", "李明" },{ "Sex", "男" } }}} },new BsonDocument {{"ClassName","二年级" },{"StudentItems",new BsonArray{new BsonDocument { { "Age", 10 },{ "Name", "李明" },{ "Sex", "男" } }}} }
});

使用C#语言习惯自己建 实体类

-删除

IMongoCollection collection = dbBase.GetCollection("Class");
//删除单个
collection.DeleteOne(n => n.ClassName == "二年级");//使用拉姆达表达式
collection.DeleteOne(new BsonDocument("ClassName", "二年级"));//使用BsonDocument
var filter = Builders.Filter.Eq("_id", new BsonObjectId("5a545e9381a98c3ab46c9cb9"));
collection.DeleteOne(filter);//使用Builders,
//批量删除
collection.DeleteMany(n => n.ClassName == "二年级");
collection.DeleteMany(new BsonDocument("ClassName", "二年级"));
collection.DeleteMany(filter);
//删除并返回
collection.FindOneAndDelete(n => n.ClassName == "三年级");

IMongoCollection collection = dbBase.GetCollection("Class");
//删除单个
collection.DeleteOne(new BsonDocument("ClassName", "二年级"));//使用BsonDocument
var filter = Builders.Filter.Eq("_id", new BsonObjectId("5a545e9381a98c3ab46c9cb9"));
collection.DeleteOne(filter);//使用Builders,
//批量删除
collection.DeleteMany(new BsonDocument("ClassName", "二年级"));
collection.DeleteMany(filter);
//删除并返回
collection.FindOneAndDelete(new BsonDocument("ClassName", "二年级"));

使用BsonDocument,就不能使用酷酷的拉姆达表达式了,其它的差不多。

---------------------------更改---------------------------------

IMongoCollection collection = dbBase.GetCollection("Class");
//修改单个
var filter = Builders.Filter.Eq("_id", new BsonObjectId("5a545e9381a98c3ab46c9cb8"));
var update = Builders.Update.Set("ClassName", "三年级");
var update2 = Builders.Update.Set(n => n.ClassName, "三年级");collection.UpdateOne(n => n.ClassName == "二年级", update);//使用拉姆达表达式
collection.UpdateOne(filter, update2);//使用Builders
//批量修改
collection.UpdateMany(n => n.ClassName == "二年级", update);
collection.UpdateMany(filter, update2);
//替换
var schoolClass = collection.Find(n => n.ClassName == "二年级").FirstOrDefault();
collection.ReplaceOne(n => n.ClassName == "二年级", schoolClass);

使用BsonDocument 也是相应差不多,我就不贴出代码了,修改数组,则大概如下

//数组增加一个
var update = Builders.Update.Push("StudentItems", new Student { Age = 18, Name = "张明", Sex = "男" });
collection.UpdateOne(n => n.ClassName == "三年级", update);
//数组减少一个
var update2 = Builders.Update.Pull(n => n.StudentItems, new Student { Age = 18, Name = "张明", Sex = "男" });
collection.UpdateOne(n => n.ClassName == "三年级", update2);
//数组修改一个
var update3 = Builders.Update.Set("StudentItems.$.Age", 30);
collection.UpdateOne(n => n.ClassName == "三年级" && n.StudentItems.Any(m=>m.Age==10), update3);
var update4 = Builders.Update.Set("StudentItems.$", new Student { Age = 18, Name = "张明", Sex = "男" });
collection.UpdateOne(n => n.ClassName == "三年级" && n.StudentItems.Any(m => m.Age == 10)

 本文参考:奇怪的知识在增长

相关内容

热门资讯

最新或2023(历届)兰州理工... 最新或2023(历届)兰州理工大学技术工程学院学费和录取通知书报名时间文管类专业学生10000元/人...
在谢师宴上的即席讲话稿 谢师宴... 在谢师宴上的即席讲话稿首先感谢岭南长者学院为我们所做的周全安排。不仅每夏天为我们组织这样好的讲座,而...
家长在升学宴上的讲话稿 升学宴... 激在升学宴上的讲话稿尊敬的各位来宾,女士们,先生们: 大家好! 今天大家在百忙中前来祝贺我女儿考上西...
学生在升学宴上的讲话稿 学生在... 学生在升学宴上的讲话稿尊敬的各位来宾,亲爱的叔叔阿姨们: 大家好! 很高兴邀请到各位参加我的升学宴。...
在80后青年干部挂职锻炼动员会... 在后青干部挂职锻炼动员会上的发言稿尊敬的曾部长、黄部长,各位领导,各位朋友,大家上午好!能有机会参加...