Mongodb

Posted BoSet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb相关的知识,希望对你有一定的参考价值。

一:打开安装包bin目录下

二:打开cmd,切换到bin目录下

 

 三:把Mongodb安装到服务上,在cmd窗口输入mongod --install

是mongod --install上面写错了

四:设置配置文件,在bin目录下创建一个Data文件夹用来等下存放数据,然后新建一个mongodb.conf,打开mongodb.conf输入下面的配置信息,退出保存

五:在cmd输入mongodb --config mongodb.conf,执行上一步的配置文件

 是mongod --config mongodb.conf上面写错了

 

 六:在cmd输入mongo 服务器IP:27017,例如本例是本机安装mongo与IIS,所以输入mongo 127.0.0.1:27017

七:浏览器输入localhost:27017,出现下面这句话则表示开启成功

八:不要关掉这个cmd。这时另外打开一个cmd操作数据库,常用命令

use 数据库名:切换数据库
show dbs显示所有数据库
show collections:显示所有集合
db:查看当前指向的文档
db.Users:指向Users集合
db.Users.find():查看所有数据
db.Users.insert({写个json字符串}),在写命令时可以回车 ex:db.Users.insert({id:1,name:\'bishige\',age:12})
这就是无模式的优势,想加哪个列都可以,而且区分大小写
db.Users.remove():删除所有数据
_id的值是由系统自己维护的,我们不需要管,可以参考文档“mongodb学习 P4”来简单说明
查询数据:item=db.Users.find({"UId":5})
修改:db.Users.update({条件},{新值})
删除:db.Users.remove({条件})
多insert几条数据,为搜索做准备
搜索:db.Users.find({"UId":{"$gt":8}})表示大于8,great than
读一读:db.UserInfo.find({"$or":[{"id":{"$gt":1}},{"age":{"$lt":20}}]})//id>1 or age<20
说明:进行修改时不会迭代,删除时迭代

九:.Net操作mongodb

-》.net读写
《1》引入程序集

《2》自定义类型,用于表示集合中的实体,如Person
定义属性,加特定[BsonId]表示与集合中ObjectId类型属性对应

public class Person
    {
        [BsonId]
        public ObjectId Id { get; set; }
        public string Name { get; set; }
    }

 

除了ID这个字段不太一样,其他定义属性跟sql server一样。因为mongodb的主键实际上是"_id":ObjectId("一大堆数字"),所以自定义id属性的时候要加上[BsonId]才能转换成ObjectId
因为mongodb是没有表的概念的
实际上全部都是json键值对,不是说定义Person这个模型的时候,加了Name,Id这两个属性,mongodb里面有就有Name,Id这两个字段了,不是这样的
Person p = new Person() { Id=ObjectId.GenerateNewId(),Name="bishige"};初始化模型,id要通过ObjectId.GenerateNewId()这种方式赋值

《3》创建连接字符串,格式如:“mongodb://127.0.0.1:27017”

//在配置文件中设置mongodb连接字符串
<appSettings>
    <add key="mongo" value="mongodb://127.0.0.1:27017"/>
</appSettings>

  

《4》根据连接字符串创建服务器对象:
根据连接字符串创建MongoUrl对象url
根据url对象创建MongoServerSettings对象settings
根据settings创建MongoServer对象server


《5》由服务器对象获取数据库对象MongoDatabase:server.GetDatabase("user"),如果没有会自动创建
《6》获取集合对象
获取类的名称,作为集合的名字:typeof(Person).Name
由数据库对象获取集合对象:db.GetCollection<Person>(集合名称),如果集合不存在会自动创建
《7》集合对象的方法:Insert,Update,Count,FindAll返回集合然后遍历,Find使用Query参数,FindOneById
使用Bson方式进行查询:Query
返回类型为MongoCursor<T>,可以使用foreach遍历
如:Query.GT("ID",1);//表示查询ID大于1的所有数据
通过AsQueryable()方法将集合转成IQueryable<T>,然后使用linq或lambda进行查询
-》mongodb与redis的区别
1、mongodb是文档型数据库
2、mongodb支持复杂查询

 十:.Net操作MongodbDemo

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MongodbDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Person pson = new Person() { Id = ObjectId.GenerateNewId(), Name = "bishige", Age = 12 };

            string mongoIp = System.Configuration.ConfigurationManager.AppSettings["mongo"];
            MongoUrl url = new MongoUrl(mongoIp);
            //MongoServerSettings setting = new MongoServerSettings();不能用这种new出来
            MongoServerSettings setting = MongoServerSettings.FromUrl(url);//类似工厂式创建
            MongoServer server = new MongoServer(setting);

            //记住MongoServer这个类,都是通过它来操作数据库
            MongoDatabase db = server.GetDatabase("hm12");
            string collectionName = pson.GetType().Name + "s";//对象.GetType().Name/FullName-》获取对象的名字,fullname是全名称,包括命名空间,这里只是想获取类名作为mongodb表名(集合名称)
            if (db.CollectionExists(collectionName))
            {
                //如何该集合存在,就把集合取出来               
                MongoCollection<Person> personCollection = db.GetCollection<Person>(collectionName);

                //往集合里面添加模型数据
                personCollection.Insert(pson);

                //查询数据
                QueryBuilder<Person> query = new QueryBuilder<Person>();
                IMongoQuery q1 = query.GT(p => p.Age, 10);//大于10岁的
                IMongoQuery q2 = query.EQ(p => p.Name, "bishige");//等于
                IMongoQuery q3 = query.And(q1, q2);//QueryBuilder这个对象很重要,增删改查都是通过它来点出来
                MongoCursor<Person> cursor = personCollection.Find(q3);//Find()就相当于select语句
                //MongoCursor继承IEnumerable,所以Find()查出来的是一个集合
                foreach (var person in cursor)
                {
                    Console.WriteLine(person);
                }
            }
            else
            {
                //如何该集合不存在,就创建一个
                CommandResult result = db.CreateCollection(collectionName);
            }
        }
    }
    public class Person
    {
        [BsonId]
        public ObjectId Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        //格式化输出效果,跟OC那个重写一样
        public override string ToString()
        {
            return string.Format("Id:{0},Name:{1},Age:{2}", Id, Name, Age);
        }
    }
}

  

以上是关于Mongodb的主要内容,如果未能解决你的问题,请参考以下文章

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

mongodb关联查询

无法在 MongoDB(猫鼬)文档中追加数组

在 Spring MongoDB 的 ReplaceRoot 管道阶段使用 $mergeObjects

如何创建一个查询来查找 2 个数字之间的值,这些数字是 MongoDB 中的字符串类型

MongoDB GridFS