MongoDb 相關


本文地址:http://www.cnblogs.com/vnii/archive/2012/08/23/2652891.html

1.C#下對MongoDB中的數據分組Group

            IMongoQuery query = null;
            query = Query.And(
                Query.EQ("CityCode", "hangzhou"),
                Query.EQ("LT_IsBDT", 1),
                Query.EQ("LT_Checked", 1) 
                );

            Dictionary<string, int> dictionary = new Dictionary<string, int>();
            dictionary["num"] = 0;

            //IMongoGroupBy groupBy = null;
            //groupBy = GroupBy.Keys("LTT_ID");
            GroupByBuilder groupByBuilder = new GroupByBuilder(new string[] { "LTT_ID", "LTT_TypeName", "LTT_ParentID" });

            var tSmall = _mongoCollection.Group(query, groupByBuilder, BsonDocument.Create(dictionary),
                                           BsonJavaScript.Create("function(doc,prev){prev.num++;}"),
                                           BsonJavaScript.Create("function(doc){ doc.count=doc.num;delete doc.num; }")).ToList();

 

2.C#操作MongoDB的部分代碼示例

MongoServer _mongoServer = MongoServer.Create("mongodb://192.168.90.245:10008/?safe=true"); //連接數據庫
MongoDatabase _mongoDatabase = _mongoServer.GetDatabase("MYDB"); //選擇數據庫名
MongoCollection MongoCt = _mongoDatabase.GetCollection("MyCollection"); //選擇集合,相當於表

//獲取數據
public List<InfoModel> GetTopicListByType(string sKeyWord,int iPageSize,int iCurrPageIndex)
{
    IMongoQuery query = null;
            query = Query.And(
                Query.EQ("LT_IsBDT", 1),
                Query.EQ("LT_Checked", 1),
        Query.Or(Query.EQ("LT_Status", 0), Query.EQ("LT_Status", 1)),
                Query.GTE("LT_CreateDate", DateTime.Now),
                Query.Matches("LT_Title", BsonRegularExpression.Create("/.*" + sKeyWord + ".*/"))
                );
    SortByDocument sort = new SortByDocument { { "LT_CreateDate", -1 } };
    return MongoCt.FindAs<InfoModel>(query).SetLimit(iPageSize).SetSkip(iPageSize * iCurrPageIndex).SetSortOrder(sort).ToList();
}

//更新+1
public bool IncViewCount(int iLtId, int iInc)
{
    IMongoQuery query;
    query = Query.And(
        Query.EQ("LT_ID", iLtId)
        );

    UpdateBuilder update = new UpdateBuilder();
    SafeModeResult r = MongoCt.Update(query, update.Inc("LT_ViewCount", iInc));
    return r != null && r.Ok;
}



//插入數據
public bool InsertBatch<T>(IEnumerable<T> document)
{
    List<SafeModeResult> result = (List<SafeModeResult>) this.MongoCt.InsertBatch<T>(document);
    return result != null && result[0] != null && result[0].Ok;
}



//根據ID刪除數據
public bool RemoveBatchById(List<int> list)
{
    IMongoQuery query = null;
    query = Query.And(
    Query.In("IA_ID",BsonArray.Create(list))
    );
    SafeModeResult result = this.MongoCt.Remove(query);

    return result != null && result.Ok;
}

//根據ID更新數據
public bool UpdateSingleByLtid(InfoModel model)
{
    IMongoQuery query;
    query = Query.And(
        Query.EQ("IA_ID", model.IA_ID)
        );
    BsonDocument bsonDocument = model.ToBsonDocument<InfoModel>();
    bsonDocument.Remove("_id");
    bsonDocument.Remove("IA_ID");

    var update = new UpdateDocument
        {
             {"$set", bsonDocument}
        };
    SafeModeResult result = this.MongoCt.Update(query, update);
    return result != null && result.Ok;
}

// 刪除所有數據
public bool RemoveAll()
{
    SafeModeResult r = this.MongoCt.Remove(null);
    return r != null && r.Ok;
}


// 創建索引
public bool CreateIndex1()
{
    SafeModeResult r = this.MongoCt.CreateIndex(
        new IndexKeysBuilder().Ascending("IA_CityCode","IT_Key").Descending("IA_CreateDate")
        );
    return r != null && r.Ok;
}

// 獲取表索引
public GetIndexesResult GetIndex()
{
    return this.MongoCt.GetIndexes();
}

// 刪除表索引
public bool DropIndex()
{
    return this.MongoCt.DropAllIndexes().Ok;
}


3.命令行下語法

db.collection.update( criteria, objNew, upsert, multi )

criteria : update的查詢條件,類似sql update查詢內where后面的
objNew   : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set后面的
upsert   : 這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認是false,不插入。
multi    : mongodb默認是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。

//用法:{ $inc : { field : value } }
//意思對一個數字字段field增加value, 如SQL-“update test0 set count=count+1 where _id=15”
db.test0.update( { "_id" : 15 } , { $inc : { "count" : 1 } } );

//用法:{ $unset : { field : 1} }
//顧名思義,就是刪除字段了,刪除某條件下的文檔中的某個列,如:
db.test0.update( { "_id" : 15 } , { $unset : { "Age":1 } } );

//添加字段賦值
db.test0.find().forEach(
 function(item){
  db.test0.update({},{"$set":{"CreateDate":item.UpdateDate}},false,true)
 }
)

db.test0.find({CityCode:"hz","CreateDate":{$exists:false}}).forEach(
 function(item){
  db.test0.update({CityCode:"hz","CreateDate":{$exists:false}},{"$set":{"CreateDate":item.UpdateDate}},false,true)
 }
)

//查詢指定字段
db.test0.find({},{"CreateDate":1,_id:0})

//查找不存在字段FName的記錄
db.test0.find({CityCode:"hz","FName":{$exists:false}})

//創建索引
db.test0.ensureIndex({"CityCode":1,"LT_ID":-1},{"name":"test0ByLtId"})
//刪除索引
db.runCommand({deleteIndexes: "表名", index: "索引名"})   //刪除指定索引
db.test0.dropIndexes()    //刪除所有索引
//查看索引
db.test0.getIndexes()

//列重命名
db.test0.update({},{$rename:{"BigTypeName":"ParentTypeName"}},false,true)

db.test0.remove({});    // 刪除things中的所有數據
db.test0.remove({n:1}); // 刪除things中n=1的所有數據 類似delete where n = 1

// 鏈接字符串
Servers=IP:27017;ConnectTimeout=30000;ConnectionLifetime=300000;MinimumPoolSize=8;MaximumPoolSize=256;Pooled=true

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM