(翻译)在 Xamarin 应用中使用 MongoDB
原文地址:https://blog.xamarin.com/write-apps-using-mongodb-xamarin/
在设计应用时,最重要的决定之一就是要使用什么类型的数据库。
不久之前,这种选择仅限于像 SQL server 这样的关系型数据库。然而,现在 NoSql 数据库出现了,好处是允许应用程序同时处理大量结构和和非结构化数据,能够容易的将数据建模为对象和大规模跨服务器。
MongoDB 是一个 NoSQL 数据库,以二进制 JSON 格式存储文档,已经在 Node.js 社区流行了一段时间。Azure Cosmos DB 是一个完全管理的云数据库。只需点击几下就可以配置一个与 MongoDB 100% 兼容的数据库。
虽然 MongoDB 是因为 Node.js 解决方案而流行,但对于.NET 驱动也是一个完全支持和维护的。驱动程序是 .NET Standard 的实现,这意味着它与多个平台兼容,包括 Xamarin。
本文将向你展示如何使用 MongoDB 创建你的第一个 Xamarin 应用!我们会使用 LINQ 查询,插入和删除数据。在文章结束时,你会有需要创建 MongoDB 给力的 Xamarin 应用的信息。
你可以在这个 GitHub 仓库找到所有示例的代码。
设置环境
为了教学目的,我们的 MongoDB 将托管在 Azure Cosmos DB。
首先,获取 Azure Cosmos DB 实例设置和准备使用,跟着 Azure Cosmos DB 文档页的说明。如果你还没有设置,通过这个连接创建一个 Azure 免费账号。
MongoDB.NET 库允许 Xamarin 应用和 MongoDB 通信。通过 Visual Studio 或者 Visual Studio for Mac 的 NuGet 包管理搜索 MongoDB.NET 驱动并添加到你的你所有的项目。
连接 MongoDB
接下来,我们的应用需要连接到 MongoDB。使用 MongoClient 对象得到 IMongoDatabase 的引用。然后使用 IMongoDatabase 对象获得 IMongoCollection<T> 类的引用。(请参阅示例项目的连接代码的例子。)
了解连接过程,有助于理解 MongoDB 如何排列数据。
上面创建的 Azure Cosmos DB 账号时第一级组织。账号下面有一个或多个数据库(databases)。然后一个或更多的集合(collections)构成了数据库。最后一级,文档(documents)存在于集合中。

为了读写文档,我们的应用将使用 IMongoCollection<T> 类。其中泛型时我们的模型或者是文档的强类型表现。
查询数据
我们使用 IMongoCollection<T> 查询集合中的文档。在移动应用中,异步查询是非常重要的,可以避免阻塞 UI 线程并提供更好的用户体验。.NET的一个伟大的特性是 LINQ 查询。LINQ 帮助开发者以易于理解的语法编写复杂的查询语句,幸运的是,MongoDB 驱动完全支持 LINQ 查询。
返回集合中每个文档的代码如下所示:
public async Task<List<ToDoItem>> GetAllItems()
{
var allItems = await ToDoItemsCollection
.Find(new BsonDocument())
.ToListAsync(); return allItems;
}
上面要注意的是在 Find 函数中是 BsonDocument。指示一个空过滤器并需要返回任何文档。
AsQueryable() 扩展提供了支持 LINQ 扩展的接口,可以利用过滤器、skip 和 take 等语句。
写入数据
MongoDB.NET 库也提供了一个简单的异步数据修改 API。
像这样插入数据:
public async Task InsertItem(ToDoItem item)
{
await ToDoItemsCollection.InsertOneAsync(item);
}
使用下面的代码更新整个文档:
public async Task UpdateItem(ToDoItem item)
{
await ToDoItemsCollection.ReplaceOneAsync(tdi => tdi.Id == item.Id, item);
}
当用于装饰类和属性时 MongoDB 驱动定义了特性来提供附加信息。例如 [BsonId] 特性指定类中的哪个属性应该用做主键或者标识 instance/document。
总结
MongoDB 时一个众所周知并广泛使用的文档数据库。Azure Cosmos DB 和 .NET MongoDB 驱动的结合使 Xamarin 应用成为一个可行的解决方案,这对 .NET 移动开发者来说时比较熟悉的。
想了解更多 MongoDB 的内容,请参阅这里。阅读更多关于 Cosmos DB 上 MongoDB 的信息在这里。这里提供了示例程序的测试驱动。
(翻译)在 Xamarin 应用中使用 MongoDB的更多相关文章
- C# .NET Core 3.1中使用 MongoDB.Driver 更新嵌套数组元素和关联的一些坑
C# .NET Core 3.1中使用 MongoDB.Driver 更新数组元素和关联的一些坑 前言: 由于工作的原因,使用的数据库由原来的 关系型数据库 MySQL.SQL Server 变成了 ...
- Xamarin.Forms中的ListView的ItemTrapped事件与ItemSelected事件的区别
今天对Xamarin.Forms中的ListView的两个事件(ItemTrapped和ItemSelected)做了小小的研究,发现有以下几点区别: 1.ItemTrapped事件会优先被触发. 2 ...
- SignalR在Xamarin Android中的使用
原文:SignalR在Xamarin Android中的使用 ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 ...
- Xamarin.Android中使用android:onClick="xxx"属性
原文:Xamarin.Android中使用android:onClick="xxx"属性 在原生Android开发中,为一个View增加点击事件,有三种方式: 1.使用匿名对象 ( ...
- 如何在.Net中使用MongoDB
最近在研究mongodb,针对.net 中使用mongodb的文章要么是早期的驱动版本,要么资料很少,所以写个随笔记录一下 本文主要记录 1.什么是MongoDB 2.MongoDB windows ...
- 在java中使用MongoDB数据库
Java 安装 要想在 Java 程序中使用 MongoDB,需要先确定是否安装了 MongoDB JDBC 驱动,并且要在机器上安装了 Java.查看 Java 教程来确保在机器上安装好 Java. ...
- 关于xamarin.forms 中 list 的loadmore
前言 最近几天在研究上拉加载啊,下拉刷新啊什么的.然而坑爹的事情总是那么多.在xamarin.forms中,list自带的,并没有上拉加载的这个属性(难道当初他们封装方法时,就不会想到数据多了会咋整吗 ...
- [置顶]
Xamarin android中使用signalr实现即时通讯
前面几天也写了一些signalr的例子,不过都是在Web端,今天我就来实践一下如何在xamarin android中使用signalr,刚好工作中也用到了这个,也算是总结一下学到的东西吧,希望能帮助你 ...
- Xamarin Android 中Acitvity如何传递数据
在xamarin android的开发中,activity传递数据非常常见,下面我也来记一下在android中activity之间传递数据的几种方式, Xamarin Android中Activity ...
随机推荐
- 题解【luoguP1525 NOIp提高组2010 关押罪犯】
题目链接 题解 算法: 一个经典的并查集 但是需要用一点贪心的思想 做法: 先将给的冲突们按冲突值从大到小进行排序(这很显然) 然后一个一个的遍历它们 如果发现其中的一个冲突里的两个人在同一个集合里, ...
- array_pop 剔除最后一个数组元素
<?php $a=array("red","green","blue"); print_r(array_pop($a)); //blu ...
- String作为输出型参数时获取不到值
有时候在一个方法中,我们需要返回多个字符串,而又不想将这些字段包成一个类.此时就需要使用输出型参数. 但是如果将输出型参数的类型声明为String,那么调用该方法后,是获取不到我们想要的值的. 测试代 ...
- j2ee 项目部署指引
j2ee相关的项目一般是web工程或java application,部署到linux服务器上,本文结合自己的经验.教训,总结下部署的过程. 一.准备阶段 部署前要做的事情: 1.明确自己的产品都包含 ...
- II8部署WCF服务出错
环境:Windows 2012 R2 + IIS 8.0 + .NET 4.5 错误404.3 - Not Found: 控制面板->程序->启用或关闭Windows功能,如下图所示,将需 ...
- Java包名命名规则
1. sun公司建议java包的命名规则为域名的倒写. 比如:sun公司www.sun.com 就用该是com.sun.www 2. indi : 个体项目,指个人发起,但非自己独自完成的项目,可公 ...
- 使用awk批量杀进程的命令
在做系统运维的过程中,有时候会碰到需要杀掉某一类进程的时候,如何批量杀掉这些进程,使用awk命令是很好的选择. ps -ef|grep aaa|grep -v grep|awk '{print &qu ...
- 【BZOJ2288】生日礼物 [贪心]
生日礼物 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description ftiasch 18岁生日的时候, ...
- “adb server is out of date.
今天,久未出现的著名的“adb server is out of date. killing”又发生了,在此,将解决方法记下,以便日后查看. 1. 错误信息: C:\Users\lizy>ad ...
- TCP的3次握手/4次握手
三次握手: 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图下所示: (1) 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SE ...