標籤:
摘要
在實際開發中遇到更新某個document中的數組的值,這裡做一下記錄。
這裡使用的驅動為
using MongoDB.Bson;
using MongoDB.Driver;
相關文章
[MongoDB]入門操作
[MongoDB]增刪改查
[MongoDB]count,gourp,distinct
[MongoDB]mapReduce
[MongoDB]Profiling效能分析
[MongoDB]索引
Mongodb c#增刪改查
mongodb培訓
demo
using MongoDB.Bson;using MongoDB.Driver;using MongoDB.Driver.Builders;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Wolfy.Mongodb{ class Program { static void Main(string[] args) { } } class MongoHelper { private static readonly string _db = ""; private static readonly string _col = ""; private static readonly string _ip = ""; private static readonly string _user = ""; private static readonly string _pwd = ""; private static readonly string _connStr = string.Format("mongodb://{0}:{1}@{2}:27017/{3}", _user, _pwd, _ip, _db); /// <summary> /// 為某個userId添加friend,如果數組中不存在則添加 /// </summary> /// <param name="userId"></param> /// <param name="friendId"></param> /// <returns></returns> public static bool UpdateOrInsert(string userId, string friendId) { var col = GetCollection(); var query = new QueryDocument { { "userId", userId }, new QueryDocument { { "$nin", new BsonArray().Add(friendId) } } }; var update = Update.Push("friends", friendId).Inc("count", 1); return col.Update(query, update, UpdateFlags.None).Ok; } private static MongoCollection<BsonDocument> GetCollection() { MongoClient client = new MongoClient(_connStr); MongoServer server = client.GetServer(); var db = server.GetDatabase(_db); var col = db.GetCollection(_col); return col; } /// <summary> /// 從屬性中移除好友 /// </summary> /// <param name="userId"></param> /// <param name="friendId"></param> /// <returns></returns> public static bool RemoveFriend(string userId, string friendId) { var col = GetCollection(); var query = new QueryDocument { { "userId", userId } }; MongoDB.Driver.Builders.UpdateBuilder builder = new MongoDB.Driver.Builders.UpdateBuilder(); builder.Pull("friends", friendId); return col.Update(query, builder, UpdateFlags.None).Ok; } /// <summary> /// 更新欄位值 /// </summary> /// <param name="userId"></param> /// <param name="dic"></param> /// <returns></returns> public static bool UpdateFields(string userId, Dictionary<string, object> dic) { var col = GetCollection(); var query = new QueryDocument { { "userId", userId } }; MongoDB.Driver.Builders.UpdateBuilder builder = new MongoDB.Driver.Builders.UpdateBuilder(); foreach (var item in dic.Keys) { builder.Set(item, BsonValue.Create(dic[item])); } builder.Set("dt", DateTime.Now); return col.Update(query, builder, UpdateFlags.Upsert).Ok; } }}
代碼
上述是好友名單中的操作。如果好友名單中已經存在,則不再添加,否則添加。省略用c#在做業務的判斷了。其實有很多,都可以交給mongodb去做,可以在代碼中少很多的if-else。
[MongoDB]對數組操作