MongoDB(索引及C如何操作MongoDB)

索引总概况

db.test.ensureIndex({"username":1})//创建索引
db.test.ensureIndex({"username":1, "age":-1})//创建复合索引 数字1表示username键的索引按升序存储,-1表示age键的索引按照降序方式存储。
// 该索引被创建后,基于username和age的查询将会用到该索引,或者是基于username的查询也会用到该索引,但是只是基于age的查询将不会用到该复合索引。因此可以说,如果想用到复合索引,必须在查询条件中包含复合索引中的前N个索引列。然而如果查询条件中的键值顺序和复合索引中的创建顺序不一致的话,MongoDB可以智能的帮助我们调整该顺序,以便使复合索引可以为查询所用。
db.test.ensureIndex({"userid":1},{"unique":true})//创建唯一索引
db.test.ensureIndex({"userid":1,"age":1},{"unique":true}) // 我们同样可以创建复合唯一索引,即保证复合键值唯一即可
db.test.ensureIndex({"username":1},{"background":true})//如果在为已有数据的文档创建索引时,可以执行下面的命令,以使MongoDB在后台创建索引,这样的创建时就不会阻塞其他操作。但是相比而言,以阻塞方式创建索引,会使整个创建过程效率更高,但是在创建时MongoDB将无法接收其他的操作。
db.test.ensureIndex({"userid":1},{"unique":true,"dropDups":true})
//创建唯一索引,并消除重复数据。

db.test.getIndexes()//查看索引
db.system.indexes.find()// system.indexes集合中包含了每个索引的详细信息,因此可以通过下面的命令查询已经存在的索引

db.test.dropIndex({"username":1})//删除索引

Explain方法简介

explain是非常有用的工具,会帮助你获得查询方面诸多有用的信息。只要对游标调用该方法,就可以得到查询细节。explain会返回一个文档,而不是游标本身。explain会返回查询使用的索引情况,耗时和扫描文档数的统计信息。

db.test.find().explain()
{
"cursor" : "BasicCursor",
"nscanned" : 1,
"nscannedObjects" : 1,
"n" : 1,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : { }
}
  • "cursor":"BasicCursor"表示没有使用索引,查找采用的是“表扫描”,也就是顺序查找。 ”BtreeCursor"采用B树的结构来存放索引
  • "nscanned":1 表示查询了多少个文档。
  • "n":1 表示返回的文档数量。
  • "millis":0 表示整个查询的耗时。

这里特别说明一下哦,不要认为你把里面的数据都删除掉了索引也随之没有了,索引自从你建立之后就一直存在在那儿,除非你手工删除,如果你确定是不需要的索引,请务必使用dropIndex方法将它手工删除。

C#中使用MongoDB DLL驱动

MongoDB.Driver.dll:顾名思义,驱动程序

MongoDB.Bson.dll:序列化、Json相关

下载地址 http://files.cnblogs.com/files/elegance/MongoDBDll.zip

c#操作MongoDB简单代码介绍

模型层代码如下:

    /// <summary>
/// 用户主要资料
/// </summary>
public class UserInfo
{
public string UserId { get; set; }
public string UserName { get; set; }
public string PassWord { get; set; }
public Detail Detail { get; set; }
} /// <summary>
/// 用户详细资料
/// </summary>
public class Detail
{
public string Address { get; set; }
public int Age { get; set; }
public string Email { get; set; }
}

UserBLL逻辑层中主要代码如下:

        public string connectionString = "mongodb://localhost";//连接字符串
public string databaseName = "myDatabase";//数据库名 private Mongo mongo;
private MongoDatabase mongoDatabase; //注意这里泛型类型为“UserInfo”
private MongoCollection<UserInfo> mongoCollection; public UserBLL()
{
mongo = GetMongo();
mongoDatabase = mongo.GetDatabase(databaseName) as MongoDatabase;//获得数据库
mongoCollection = mongoDatabase.GetCollection<UserInfo>() as MongoCollection<UserInfo>;//获得数据库中集合
mongo.Connect();//在构造函数中进行数据库连接
}
~UserBLL()
{
mongo.Disconnect();//在析构函数中进行关闭连接
} /// <summary>
/// 配置Mongo,将类UserInfo映射到集合
/// </summary>
private Mongo GetMongo()
{
var config = new MongoConfigurationBuilder();
//进行映射
config.Mapping(mapping =>
{
mapping.DefaultProfile(profile =>
{
profile.SubClassesAre(t => t.IsSubclassOf(typeof(UserInfo)));
});
mapping.Map<UserInfo>();
});
config.ConnectionString(connectionString);
return new Mongo(config.BuildConfiguration());
}

插入、选择、删除数据方法如下(写在UserBLL中)

        /// <summary>
/// 查询详细资料地址为湖北的用户信息
/// </summary>
public List<UserInfo> Select()
{
return mongoCollection.Linq().Where(x => x.Detail.Address == "湖北").ToList();
} /// <summary>
/// 删除全部用户信息
/// </summary>
public void DeleteAll()
{
mongoCollection.Remove(x => true);
}
/// <summary>
/// 插入一些数据
/// </summary>
public void InsertSomeData()
{
UserInfo userInfo1 = new UserInfo()
{
UserId = "",
UserName = "张三",
PassWord = ""
};
mongoCollection.Save(userInfo1); UserInfo userInfo2 = new UserInfo()
{
UserId = "",
UserName = "李四",
PassWord = "",
Detail = new Detail()
{
Address = "湖北",
Age = ,
Email = "lisi@163.com"
}
};
mongoCollection.Save(userInfo2); UserInfo userInfo3 = new UserInfo()
{
UserId = "",
UserName = "王五",
PassWord = "",
Detail = new Detail()
{
Address = "广东",
Age = ,
Email = "wangwu@163.com"
}
};
mongoCollection.Save(userInfo3); UserInfo userInfo4 = new UserInfo()
{
UserId = "",
UserName = "赵六",
PassWord = "",
Detail = new Detail()
{
Address = "湖北"
}
};
mongoCollection.Save(userInfo4); }

当然上述的查询和删除的方法写成如下所示也是可以的

      /// <summary>
/// 删除全部用户信息
/// </summary>
public void DeleteAll()
{
mongoCollection.Remove(new Document { });
}
    /// <summary>
/// 插入一些数据
/// </summary>
public void InsertSomeData()
{
Document userInfo1 = new Document();
userInfo1["UserId"] = "";
userInfo1["UserName"] = "张三";
userInfo1["PassWord"] = "";
mongoCollection.Save(userInfo1); Document userInfo2 = new Document();
userInfo2["UserId"] = "";
userInfo2["UserName"] = "李四";
userInfo2["PassWord"] = "";
//子文档
var userInfo2Detail = new Document();
userInfo2Detail["Address"] = "湖北";
userInfo2Detail["Age"] = ;
userInfo2Detail["Email"] = "lisi@163.com";
userInfo2["Detail"] = userInfo2Detail;
mongoCollection.Save(userInfo2); Document userInfo3 = new Document();
userInfo3["UserId"] = "";
userInfo3["UserName"] = "王五";
userInfo3["PassWord"] = "";
var userInfo3Detail = new Document();
userInfo3Detail["Address"] = "广东";
userInfo3Detail["Age"] = ;
userInfo3Detail["Email"] = "wangwu@163.com";
userInfo3["Detail"] = userInfo3Detail;
mongoCollection.Save(userInfo3); Document userInfo4 = new Document();
userInfo4["UserId"] = "";
userInfo4["UserName"] = "赵六";
userInfo4["PassWord"] = "";
var userInfo4Detail = new Document();
userInfo4Detail["Address"] = "湖北";
userInfo4["Detail"] = userInfo4Detail;
mongoCollection.Save(userInfo4); }

在控制台main函数中的代码如下所示:

            UserBLL userBll = new UserBLL();
userBll.InsertSomeData();
var users = userBll.Select();
foreach (var user in users)
{
Console.WriteLine(user.UserName + "是湖北人");
};
userBll.DeleteAll();
Console.ReadKey();

运行的效果如图所示:

附加话外问题

今天同学问我一个问题,在我看来我觉得太简单不过了,都懒得理会他,结果拿到手上来一试居然没解决。不知道有谁看到我这篇文章的高手能给我一点建议!

言归正传,我同学需要限制文本框只能输入中文,测试代码如下所示:

<input type="text" onchange="value = value.replace(/[^\u4E00-\u9FA5]/g, '') " />

结果就是在所有浏览器里面都可以,唯独谷歌不行,在谷歌中运行的效果就是只能输入第一次中文,后面的中文就全部输入不进去了,搞了老半天,在群里面也问过好些高手,都没有给我一个最终方案。

最后我只能经一位高手的指引建议我同学采用http://www.mathachew.com/sandbox/jquery-autotab/

但是后来我同学觉得如果采用插件的方式的话,第一不知道是否可行,第二改动太大。我后来也忙,最后不了了之了。

不知道在座的各位是否能够帮忙解决一下。(心里这个好奇呀)

原文链接
本文由豆约翰博客备份专家远程一键发布

MongoDB(索引及C#如何操作MongoDB)(转载)的更多相关文章

  1. [转]MongoDB for Java】Java操作MongoDB

    原文地址: MongoDB for Java]Java操作MongoDB 开发环境: System:Windows IDE:eclipse.MyEclipse 8 Database:mongoDB 开 ...

  2. python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查

    python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...

  3. MongoDB系列一(索引及C#如何操作MongoDB)

    索引总概况 db.test.ensureIndex({"username":1})//创建索引 db.test.ensureIndex({"username": ...

  4. Mongodb入门并使用java操作Mongodb

    转载请注意出处:http://blog.csdn.net/zcm101 最近在学习NoSql,先从Mongodb入手,把最近学习的总结下. Mongodb下载安装 Mongodb的下载安装就不详细说了 ...

  5. 【MongoDB for Java】Java操作MongoDB

    上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...

  6. MongoDB的安装与python操作MongoDB

    一.安装MongoDB 因为我个人使用的是windows,就只记录下windows下的安装 1.下载安装 就是官网,下载msi,选个路径安装 2.配置 看见别的地方说需要手动在bin同级目录创建dat ...

  7. MongoDB(3)--Java 操作 MongoDB 的 API

    引入mongoDb 依赖 <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-j ...

  8. MongoDB(六)java操作mongodb增删改查

    java操作mysql数据库的代码我们已经了如指掌了.增删改查,java对mongodb数据库也是类似的操作,先是数据库连接.再是进行操作. 首先我们进入进入admin数据库.然后建立自己的数据库te ...

  9. Mongodb学习笔记五(C#操作mongodb)

    mongodb c# driver(驱动)介绍 目前基于C#的mongodb驱动有两种,分别是官方驱动(下载地址)和samus驱动(下载地址). 本次我们只演示官方驱动的使用方法. 官方驱动文档查看 ...

随机推荐

  1. 使用weinre通过PC浏览器调试手机网页

    Weinre是什么? Weinre代表Web Inspector Remote,是一种远程调试工具.举个例子,在电脑上可以即时的更改手机上对应网页的页面元素.样式表, 或是查看Javascript变量 ...

  2. WCF学习笔记(基于REST规则方式)

    一.WCF的定义 WCF是.NET 3.0后开始引入的新技术,意为基于windows平台的通讯服务. 首先在学习WCF之前,我们也知道他其实是加强版的一个面向服务(SOA)的框架技术. 如果熟悉Web ...

  3. php使用phpmailer发送邮件

    本人新手,由于要做邮件发送验证码,所以找到和搜集到这些,本人亲测完全可以用 这是163邮箱的   因为不是企业邮箱填写的账号是163的账号,但是密码是授权码 授权码的获取方式为:

  4. Dede 列表页 缩略图 有显示无则不显示

    [field:array runphp='yes']@me = (strpos(@me['litpic'],'defaultpic') ? "" : "<div c ...

  5. PHP字符

    匹配查找 strstr strpos 通常用在表单验证里面可以用到 substr 正值表达式匹配 preg_mathc(), preg)mathc_all() , preg_grep() 编码格式的转 ...

  6. VM 启动时报错:Failed to lock the file

    http://www.cnblogs.com/kristain/articles/2491966.html Reason: Failed to lock the fileGoogle 了一下, 在網路 ...

  7. merge into 和 update 的效率对比

    以前只考虑 merge into 只是在特定场合下方便才使用的,今天才发现,merge into 竟然会比 update 在更新数据时有这么大的改进.其实呢,merge into部分的update和u ...

  8. 在Python中调用C++,使用SWIG

    http://www.coder4.com/archives/2141 SWIG:Simplified Wrapper and Interface Generator,顾名思义,就是将C/C++包装为 ...

  9. ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 (转)

    在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...

  10. POJ 3159 Candies(差分约束)

    http://poj.org/problem?id=3159 题意:有向图,第一行n是点数,m是边数,每一行有三个数,前两个是有向边的起点与终点,最后一个是权值,求从1到n的最短路径. 思路:这个题让 ...