摘要

在实际开发中遇到更新某个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. MySQL 语句遇到关键字

    MySQL中,如果拿一个关键字做列名写在一个SQL语句中. 需要加 ``(1上面那个)包裹起来.不然会报解析字符串错误. select session from wireless limit 10; ...

  2. js实现网页瀑布流布局

    效果图: html代码实现网页布局: <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  3. Leetcode 200. number of Islands

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...

  4. 【BZOJ-1441】Min 裴蜀定理 + 最大公约数

    1441: Min Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 471  Solved: 314[Submit][Status][Discuss] De ...

  5. 【bzoj1014】 JSOI2008—火星人prefix

    http://www.lydsy.com/JudgeOnline/problem.php?id=1014 (题目链接) 题意 给出一个字符串,要求维护这些操作:询问后缀x与后缀y的LCQ(最长公共前缀 ...

  6. hbase批量数据导入报错:NotServingRegionException

    批量导入数据到hbase的时候,报错: org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: Failed 1 ac ...

  7. bestcoder杯回顾

    题目列表:hdu5214~5223 5214: 当时第一反应是由递推公式推出通项公式,事实证明这就是作!大!死! 因为通项公式是这样的:L[n]=a^(n-1)*(b+L[1])-b 于是就需要快速幂 ...

  8. glibc resolv/res_send.c getaddrinfo() buffer stack smash when dealing malformation big DNS Response Package

    catalogue . 漏洞简述 . 调试环境搭建 . 漏洞利用 . 漏洞分析 . 缓解修复方案 1. 漏洞简述 0x1: 函数调用顺序 getaddrinfo (getaddrinfo.c) -&g ...

  9. iptables实现反向代理

    拓扑图 实现目标 公网用户通过Firewall服务器(iptables实现)访问内网http服务 配置 #iptables iptables -t nat -A PREROUTING -p tcp - ...

  10. POJ3258 River Hopscotch

    地址 别人的代码,自己边界总是控制不好,还不知道哪里错了!思维!这种问题代码越简洁反而越不容易错吧.. #include<stdio.h> #include<algorithm> ...