[MongoDB]對數組操作


摘要

在實際開發中遇到更新某個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。


免責聲明!

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



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