zoukankan      html  css  js  c++  java
  • [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。

  • 相关阅读:
    为什么不使用CSS expression?
    关于ol有序列表的小事儿...
    绝对定位的元素在IE6下莫名丢失解决办法
    C#操作XML
    .NET MSChart应用的一个简单例子 (转)
    微软图表控件MsChart使用初探(转)
    使用OleDbParameter来写Access的更新没反应的解决办法
    获取真实IP
    XML操作类转
    Model与XML互相转换
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/5607986.html
Copyright © 2011-2022 走看看