摘要

在实际开发中遇到更新某个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", );
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]对数组操作的更多相关文章

  1. MongoDB中数组类型相关的操作

    概述 在MongoDB的模式中,我们经常将一些数据存储到数组类型中,即我们常见的嵌套模式设计的一种实现方式.数组的这种设计实现方式在关系数据库中是没有或者说不常见的.所以,通过本文我们来梳理一下Mon ...

  2. mongoDB的shell数组操作器

    http://www.2cto.com/database/201304/205024.html mongoDB数组操作器   $push会向数组末尾加入一个元素,如果数组不存在,则会创建这个数组. 增 ...

  3. 【翻译】MongoDB指南/CRUD操作(二)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...

  4. 【翻译】MongoDB指南/CRUD操作(一)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...

  5. MongoDB的查询操作

    1. 前言 在这篇博文中,我们将学习如何查询mongoDB中的数据.当我们把数据存储在mongoDB以后,我们需要把数据查询出来.毕竟CRUD操作中,查询操作在我们系统中是我们应用比较频繁的操作.我们 ...

  6. MongoDB的CRUD操作

    1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...

  7. MongoDB各种查询操作详解

    这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下   一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...

  8. MongoDB数据库简单操作

    之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数 ...

  9. MongoDB查询修改操作语句命令大全

    MongoDB查询更新操作语句命令大全 查询操作 1.条件操作符 <, <=, >, >= 这个操作符就不用多解释了,最常用也是最简单的db.collection.find({ ...

随机推荐

  1. Stream篇

    本文转自: http://www.cnblogs.com/JimmyZheng/archive/2012/03/17/2402814.html 什么是Stream? 什么是字节序列? Stream的构 ...

  2. 根据xsd生成C#类

    var file = "1.xsd"; // Get the namespace for the schema. CodeNamespace ns = Processor.Proc ...

  3. hdu 5229 找规律

    假设选择了字符串a和b: 假设两人都按照最聪明的策略,那么观察一下可以找出规律:当a和b的字符串长度之和为奇数的时候zcc会败. 另外当a==b的时候zcc也会败(当时做的时候忘了这个了T^T) 接下 ...

  4. Bzoj2648 SJY摆棋子

    Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 3128  Solved: 1067 Description 这天,SJY显得无聊.在家自己玩.在一个 ...

  5. PHP Opcode内核实现 - [ PHP内核学习 ]

    catalogue . Opcode简介 . PHP中的Opcode . opcode翻译执行(即时解释执行) 1. Opcode简介 opcode是计算机指令中的一部分,用于指定要执行的操作, 指令 ...

  6. python图形界面(GUI)设计

    不要问我为什么要用 python 来做这种事,我回到“高兴咋地”也不是不可以,总之好奇有没有好的解决方案.逛了一圈下来,总体上来说,python 图形界面有以下几个可行度比较高的解决方案. 1. py ...

  7. ansible模块authorized_key

    示例: --- - hosts: test remote_user: root tasks: - name: deliver authorized_keys authorized_key: user: ...

  8. [JAVA 多种方式读取文件]

    package com.file; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream ...

  9. 通过Calendar类判断是否是周末及是否在指定时间

    package time; import java.sql.Timestamp; import java.util.Calendar; import java.util.Date; public cl ...

  10. Vijos 1816统计数字(计数排序)

    传送门 Description 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自 ...