[MongoDB]对数组操作
摘要
在实际开发中遇到更新某个document中的数组的值,这里做一下记录。
这里使用的驱动为
using MongoDB.Bson;
using MongoDB.Driver;
相关文章
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]对数组操作的更多相关文章
- MongoDB中数组类型相关的操作
概述 在MongoDB的模式中,我们经常将一些数据存储到数组类型中,即我们常见的嵌套模式设计的一种实现方式.数组的这种设计实现方式在关系数据库中是没有或者说不常见的.所以,通过本文我们来梳理一下Mon ...
- mongoDB的shell数组操作器
http://www.2cto.com/database/201304/205024.html mongoDB数组操作器 $push会向数组末尾加入一个元素,如果数组不存在,则会创建这个数组. 增 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- MongoDB的查询操作
1. 前言 在这篇博文中,我们将学习如何查询mongoDB中的数据.当我们把数据存储在mongoDB以后,我们需要把数据查询出来.毕竟CRUD操作中,查询操作在我们系统中是我们应用比较频繁的操作.我们 ...
- MongoDB的CRUD操作
1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...
- MongoDB各种查询操作详解
这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下 一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...
- MongoDB数据库简单操作
之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数 ...
- MongoDB查询修改操作语句命令大全
MongoDB查询更新操作语句命令大全 查询操作 1.条件操作符 <, <=, >, >= 这个操作符就不用多解释了,最常用也是最简单的db.collection.find({ ...
随机推荐
- R语言快速入门上手
导言: 较早之前就听说R是一门便捷的数据分析工具,但由于课程设计的原因,一直没有空出足够时间来进行学习.最近自从决定本科毕业出来找工作之后,渐渐开始接触大数据行业的技术,现在觉得是时候把R拿下 ...
- js实现网页瀑布流布局
效果图: html代码实现网页布局: <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- 【poj3709】 K-Anonymous Sequence
http://poj.org/problem?id=3709 (题目链接) 题意 给出一个n个数的序列,要求将其中一些数改为另一个比它小的数,改动的花费为两数的绝对值,完成改动后使得整个序列中出现过的 ...
- Linux学习路线
为什么要学习Linux? 为什么学Linux,每个人都有自己的理由: Linux是免费的不用花一分钱,能够节约大笔的成本: Linux是开源的,你可以根据自已的需要修改源代码: Linux是开放的,有 ...
- Jenkins从2.x新建Job时多了一个文件夹的功能(注意事项)
这个job如果在一个文件夹里面,那么想要的URL就会改变,默认会带上这个文件夹上去,所以在用[参数化构建插件]的时候要留意这个点.获取的URL将会不一样.
- Bzoj1711 [Usaco2007 Open]Dining吃饭
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 872 Solved: 459 Description 农夫JOHN为牛们做了很好的食品,但是牛吃饭很挑食 ...
- 通过broadcastreceiver 监听短信问题
在mainfest中 订阅 短信到来的广播时候 发现找不到 <action android:name="android.provider.Telephony.SMS_RECEIV ...
- MVC5-9 今天讲三个Descriptor
ControllerDescriptor.ActionDescriptor.ParmaterDescriptor 看名字一脸懵逼,这是做什么的呢?可别小看它们,它们在MVC中扮演着尤为重要的角色. 思 ...
- 企业开发中选择logback而不是log4j的理由
不知道看到这篇文章的Java工程师有没有考虑过这个问题:为什么在企业开发中会选择logback来记录日志,而不是log4j呢? 如果你以前没有考虑过这个问题,那么现在如果让你考虑一下,你可能觉的会是因 ...
- [转]Zookeeper原理及应用场景
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项目,其 ...