C#中在mongodb插入记录
如何在C#中往mongodb中插入记录:
static void Main(string[] args)
{
IMongoCollection<Book> collection = db.GetCollection<Book>("books");
var all = collection.Find(m => true).ToList();
//插入
collection.InsertOne(new Book() { title = "爱因斯坦" });
collection.InsertOne(new Book() { title = "物理学" });
var all2 = collection.Find(m => true).ToList();
Console.ReadKey();
}Code language: JavaScript (javascript)
补充说明
- InsertOne() 插入单条文档,InsertMany() 插入多条文档
- 不指定 _id 时,MongoDB 驱动会自动生成 ObjectId 赋值给 _id 字段
- 插入后可以通过再次 Find() 查询验证结果
C#中在mongodb修改记录
static void Main(string[] args)
{
IMongoCollection<Book> collection = db.GetCollection<Book>("books");
var one = collection.Find(m=>m._id==new
ObjectId("5e6dec305ca09501dc5584cc")).First();
FilterDefinition<Book> filter = "{ _id: ObjectId(\"5e6dec305ca09501dc5584cc\")}";
UpdateDefinition<Book> update = "{ $set: { title: '你好吗 哈哈 新文字' } }";
collection.UpdateOne(filter, update);
var one2 = collection.Find(m => m._id == new
ObjectId("5e6dec305ca09501dc5584cc")).First();
Console.ReadKey();
}Code language: JavaScript (javascript)
需要用到 FilterDefinition 和 UpdateDefinition。
具体可以参考官方文档:
http://mongodb.github.io/mongo-csharp-driver/2.10/reference/driver/definitions/
补充说明
- UpdateOne() 只更新第一条匹配文档,UpdateMany() 更新所有匹配文档
- filter 定义查询条件,update 定义要修改的字段和操作符
- 除了 JSON 字符串写法,也可以用构建器方式:
var filter = Builders<Book>.Filter.Eq("_id", new ObjectId("5e6dec305ca09501dc5584cc"));
var update = Builders<Book>.Update.Set("title", "你好吗 哈哈 新文字");
collection.UpdateOne(filter, update);Code language: JavaScript (javascript)
- 如果要用强类型字段名,可以定义:
UpdateDefinition<Book> update = Builders<Book>.Update.Set(b => b.title, "新标题");Code language: JavaScript (javascript)
C#中在mongodb删除记录
static void Main(string[] args)
{
IMongoCollection<Book> collection = db.GetCollection<Book>("books");
var one = collection.Find(m=>m._id==new
ObjectId("5e6dec305ca09501dc5584cc")).First();
FilterDefinition<Book> filter = "{ _id: ObjectId(\"5e6dec305ca09501dc5584cc\")}";
collection.DeleteOne(filter);
var one2 = collection.Find(m => m._id == new
ObjectId("5e6dec305ca09501dc5584cc")).FirstOrDefault();
Console.ReadKey();
}Code language: JavaScript (javascript)
删除操作只需要传入 FilterDefinition,在里面使用 JSON 格式的条件。
补充说明
- DeleteOne() 删除第一条匹配文档,DeleteMany() 删除所有匹配文档
- 删除后再查询,匹配不到时 FirstOrDefault() 返回 null,不会抛异常
- 也可以用构建器写条件:
var filter = Builders<Book>.Filter.Eq("_id", new ObjectId("5e6dec305ca09501dc5584cc"));
collection.DeleteOne(filter);Code language: JavaScript (javascript)
C#中在mongodb查找记录
可以按条件查询,如果条件给 true 就是查询所有。
static void Main(string[] args)
{
IMongoCollection<Book> collection = db.GetCollection<Book>("books");
var one = collection.Find(m => m._id == new
ObjectId("5e6dec305ca09501dc5584cc")).FirstOrDefault();
var list = collection.Find(m => m.title.Contains("d") && m.title.Length > 3);
Console.ReadKey();
}Code language: JavaScript (javascript)
更多查询示例:
IMongoCollection<Book> collection = db.GetCollection<Book>("books");
var one = collection.Find(m => m._id == new
ObjectId("5e6dedf3907d2e3954269152")||m.title.Contains("dd")).FirstOrDefault();
var list = collection.Find(m => m._id == new
ObjectId("5e6dedf3907d2e3954269152")).ToList();
var list2 = collection.Find(m => m._id == new
ObjectId("5e6dedf3907d2e3954269152")&&m.title.Length>3||m.title.Contains("1")).ToList();
var all = collection.Find(m => true).ToList();Code language: JavaScript (javascript)
补充说明
- Find() 返回的是 IFindFluent,可以链式调用 Sort()、Limit()、Skip():
var list = collection.Find(m => true).SortBy(b => b.title).Skip(0).Limit(10).ToList();Code language: JavaScript (javascript)
- First() 查不到会抛异常,FirstOrDefault() 查不到返回 null
- Lambda 表达式中的条件会被驱动翻译成 MongoDB 查询语法,支持大部分常用操作
- Contains() 翻译成正则表达式匹配,等价于
{ title: /d/ } - Length 属性翻译成
$strLenCP操作符,注意不是所有字符串操作都能直接翻译,复杂条件可以用 FilterDefinition 的 JSON 写法
Previous: C#中使用Mongodb
Next: 使用JDBC创建数据库