zoukankan      html  css  js  c++  java
  • MongoDB 学习笔记四 C#调用MongoDB

    驱动

    C#/.NET Driver VersionMongoDB 2.4MongoDB 2.6MongoDB 3.0
    Version 2.0
    Version 1.10
    Driver Version.NET 3.5.NET 4.0.NET 4.5Mono 2.10Mono 3.x
    Version 2.0      
    Version 1.10

    我这里下载1.10版本,framework 4.0环境。

    使用

    连接

    using MongoDB.Bson;
    using MongoDB.Driver;
    var client = new MongoClient("mongodb://localhost:27017");
    var server = client.GetServer();
    var database = server.GetDatabase("foo");
    var collection = database.GetCollection<BsonDocument>("bar");
    
    await collection.InsertOneAsync(new BsonDocument("Name", "Jack"));
    
    var list = await collection.Find(new BsonDocument("Name", "Jack"))
        .ToListAsync();
    
    foreach(var document in list)
    {
        Console.WriteLine(document["Name"]);
    }

    Document是实体类

    using MongoDB.Bson;
    using MongoDB.Driver;
    public class Person
    {
        public ObjectId Id { get; set; }
        public string Name { get; set; }
    }
    var client = new MongoClient("mongodb://localhost:27017");
    var server = client.GetServer();
    var database = server.GetDatabase("foo");
    var collection = database.GetCollection<Person>("bar");
    
    await collection.InsertOneAsync(new Person { Name = "Jack" });
    
    var list = await collection.Find(x => x.Name == "Jack")
        .ToListAsync();
    
    foreach(var person in list)
    {
        Console.WriteLine(person.Name);
    }
    

    实体类给下面的代码使用

    public class Entity
    {
        public ObjectId Id { get; set; }
        public string Name { get; set; }
    }

    插入

    var entity = new Entity { Name = "Tom" };
    collection.Insert(entity);
    var id = entity.Id; // Insert will set the Id if necessary (as it was in this example)

    查找

    var query = Query<Entity>.EQ(e => e.Id, id);
    var entity = collection.FindOne(query);
    // var entity = collection.FindOneByIdAs<Entity>(id);
    
    /*
     定义一个查询:查询stdid=1的文档
    FindOneArgs args = new FindOneArgs {
        Query = Query.EQ("stdid", 1),//查询stdid field等于1的document。
    };
    //查询
    var std = collection.FindOneAs<Student>(args);
    */
    /*
     查询多条
     IMongoQuery query = Query.GTE("stdid",2);
     var result=collection.FindAs<Student>(Query.GTE("stdid",2));
     foreach (var each in result) {
         Console.WriteLine(each.stdName);
     }
    */

    保存

    entity.Name = "Dick";
    collection.Save(entity);

    更新

    var query = Query<Entity>.EQ(e => e.Id, id);
    var update = Update<Entity>.Set(e => e.Name, "Harry"); // update modifiers
    collection.Update(query, update);

    删除

    var query = Query<Entity>.EQ(e => e.Id, id);
    collection.Remove(query);

    这是一个完整的示例:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using MongoDB.Bson;
    using MongoDB.Driver;
    using MongoDB.Driver.Builders;
    
    namespace ConsoleApplication1
    {
        public class Entity
        {
            public ObjectId Id { get; set; }
            public string Name { get; set; }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                var connectionString = "mongodb://localhost";
                var client = new MongoClient(connectionString);
                var server = client.GetServer();
                var database = server.GetDatabase("test");
                var collection = database.GetCollection<Entity>("entities");
    
                var entity = new Entity { Name = "Tom" };
                collection.Insert(entity);
                var id = entity.Id;
    
                var query = Query<Entity>.EQ(e => e.Id, id);
                entity = collection.FindOne(query);
    
                entity.Name = "Dick";
                collection.Save(entity);
    
                var update = Update<Entity>.Set(e => e.Name, "Harry");
                collection.Update(query, update);
    
                collection.Remove(query);
            }
        }
    }

    参考:http://mongodb.github.io/mongo-csharp-driver/1.10/getting_started/

    LinQ查询

    C# driver 1.8版本开始支持Linq查询。

    var linquery = from e in collection.AsQueryable<SY.Model.User>()
                           //where e.age> 22
                           select e;
    linquery=linquery.Where(c=>c.Name=="张三");
    int count=linquery.Count();
    

    参考:http://mongodb.github.io/mongo-csharp-driver/1.10/linq/

    Document查询方式

    未测试,参考地址记录在这里。

    //Document docName = new Document { { "字段名1", "输入值1" }, { "字段名2", "输入值2" } };
    /// <summary>
    /// 根据姓名获取用户信息
    /// </summary>
    /// <param name="mUserInfo">用户Model类</param>
    /// <returns>用户泛型集合</returns>
    public List<UserInfo> GetUserByName(UserInfo mUserInfo)
    {
        List<UserInfo> lsUser = new List<UserInfo>();
        using (Mongo mongo = new Mongo("mongodb://localhost"))
        {
            MongoDatabase mongoDatabase = mongo.GetDatabase("UserInfo") as MongoDatabase;
            MongoCollection<Document> mongoCollection = mongoDatabase.GetCollection<Document>("myCollection") as MongoCollection<Document>;
            mongo.Connect();
            Document docName = new Document { { "FirstName", "aaa" }, { "LastName", "bbb" } };
            MongoDB.ICursor<Document> users = mongoCollection.Find(docName);
    
            foreach (Document user in users.Documents)
            {
                UserInfo mUser = new UserInfo();
                mUser.FirstName = user["FirstName"].ToString();
                mUser.LastName = user["LastName"].ToString();
                mUser.CorporationName = user["CorporationName"].ToString();
                mUser.Phone = user["Phone"].ToString();
                mUser.Email = user["Email"].ToString();
                mUser.UserType = user["UserType"].ToString();
                lsUser.Add(mUser);
            }
        }
    
        return lsUser;
    }

    http://weishangxue.blog.163.com/blog/static/21575188201181633811102/ 
    http://mikaelkoskinen.net/post/mongodb-aggregation-framework-examples-in-c

  • 相关阅读:
    web 后台返回json格式数据的方式(status 406)
    消息队列比较
    CAP
    Redis分布式锁的正确实现方式
    idea 快捷键
    给web请求加遮罩动画
    java动态代理实现与原理详细分析(代码层面解释了AOP的实现)
    Spring框架IOC和AOP的实现原理(概念)
    springboot后台控制重定向
    消息队列如何保证幂等性?
  • 原文地址:https://www.cnblogs.com/a-du/p/7794038.html
Copyright © 2011-2022 走看看