我对 C#/MVC 和 MongoDB 都比较陌生,我才刚刚开始让 POCO 实现正常工作。但我仍然不确定如何将 C# 对象映射到更复杂的 BSON 文档。
我想看一些关于如何对具有嵌入式文档和数组等的 BSON 文档执行基本 CRUD 操作的示例。另外,我非常注重效率,我想确保我我不会替换完整的 BSON 文档(大小可能为 16MB),并且只会更改目标子文档(嵌入式文档)。
例如,这是一个 MongoDB 集合,我想对其进行各种 CRUD 操作; (完全虚构的例子..)
// customers collection
{ _id: new ObjectID(),
name: "Joe",
purchased: [
{dte: ISODate("2015-01-01"), prod_id: ObjectId("xxx"), price: 256.95, desc: "Classic iPod"},
{prod_id: ObjectId("yyy"), price: 19.95, desc: "Classic iPod earbuds"}
],
last_store: {address: "123 Abc St.", latlong: [123.234235, -9.0234234]},
used_coupons: [
{coupon_id: ObjectId("123"),
disc_type: "percent",
disc_value: 5,
applied_to: [
{ prod_id: ObjectId("xxx"), saved: 12.85 },
{ prod_id: ObjectId("yyy"), saved: 4.12 }
]},
{coupon_id: ObjectId("098"),
disc_type: "usd",
disc_value: 20,
applied_to: [
{ prod_id: ObjectId("xxx"), saved: 20 }
]}
]
}
任何人都可以向我演示如何映射到这种复杂结构吗?还有一些基本的 $push、$addToSet 或 $elemMatch 示例会很好。
最佳答案
我环顾四周,发现了一个很棒的教程,其中介绍了制作 POCO/MongoDB 类库的过程,并提供了一些嵌入式文档示例。这是 3 期系列的最后一期。这是链接:
(Dr.Dobb's) MongoDB with C#: Deep Dive
这是节选;
namespace RetrogamesWeb.Data.Services
{
using System.Collections.Generic;
using Entities;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
public class PlayerService: EntityService<Player>
{
public void AddScore(string playerId, Score score)
{
var playerObjectId = new ObjectId(playerId);
var updateResult = this.MongoConnectionHandler.MongoCollection.Update(
Query<Player>.EQ(p => p.Id, playerObjectId),
Update<Player>.Push(p => p.Scores, score),
new MongoUpdateOptions
{
WriteConcern = WriteConcern.Acknowledged
});
if (updateResult.DocumentsAffected == 0)
{
//// Something went wrong
}
}
public IEnumerable<Player> GetPlayersDetails(int limit, int skip)
{
var playersCursor = this.MongoConnectionHandler.MongoCollection.FindAllAs<Player>()
.SetSortOrder(SortBy<Player>.Ascending(p => p.Name))
.SetLimit(limit)
.SetSkip(skip)
.SetFields(Fields<Player>.Include(p => p.Id, p => p.Name));
return playersCursor;
}
public override void Update(Player entity)
{
var updateResult = this.MongoConnectionHandler.MongoCollection.Update(
Query<Player>.EQ(p => p.Id, entity.Id),
Update<Player>.Set(p => p.Name, entity.Name)
.Set(p => p.Gender, entity.Gender),
new MongoUpdateOptions
{
WriteConcern = WriteConcern.Acknowledged
});
if (updateResult.DocumentsAffected == 0)
{
//// Something went wrong
}
}
}
}
关于c# - MongoDB 嵌入式文档和 C#/POCO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27973562/
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
Ruby有一些不错的文档生成器,例如Yard、rDoc,甚至Glyph。问题是Sphinx可以做网站、PDF、epub、LaTex等。它在重组文本中完成所有这些事情。在Ruby世界中有替代方案吗?也许是程序的组合?如果我也能使用Markdown就更好了。 最佳答案 自1.0版以来,Sphinx有了“域”的概念,它是从Python和/或C以外的语言标记代码实体(如方法调用、对象、函数等)的方法。有一个rubydomain,所以你可以只使用Sphinx本身。您唯一会缺少的(我认为)是Sphinx使用autodoc从源代码自动创建文档
我怀念ipython的一件事是它有一个?为特定功能挖掘文档的运算符。我知道ruby有一个类似的命令行工具,但是我在irb中调用它非常不方便。ruby/irb有类似的东西吗? 最佳答案 Pry是IPython的Ruby版本,它支持?命令来查找有关方法的文档,但语法略有不同:pry(main)>?File.dirnameFrom:file.cinRubyCore(CMethod):Numberoflines:6visibility:publicsignature:dirname()Returnsallcomponentsofthef
我如何做Ruby方法"Flatten"RubyMethod在C#中。此方法将锯齿状数组展平为一维数组。例如:s=[1,2,3]#=>[1,2,3]t=[4,5,6,[7,8]]#=>[4,5,6,[7,8]]a=[s,t,9,10]#=>[[1,2,3],[4,5,6,[7,8]],9,10]a.flatten#=>[1,2,3,4,5,6,7,8,9,10 最佳答案 递归解决方案:IEnumerableFlatten(IEnumerablearray){foreach(variteminarray){if(itemisIEnume
我正在尝试使用nokogirigem提取页面上的所有url及其链接文本,并将链接文本和url存储在散列中。FooBar我想回去{"Foo"=>"#foo","Bar"=>"#bar"} 最佳答案 这是一个单行:Hash[doc.xpath('//a[@href]').map{|link|[link.text.strip,link["href"]]}]#=>{"Foo"=>"#foo","Bar"=>"#bar"}拆分一点可以说更具可读性:h={}doc.xpath('//a[@href]').eachdo|link|h[link.t
我最近从C#转向了Ruby,我发现自己无法制作可折叠的标记代码区域。我只是想到做这种事情应该没问题:classExamplebegin#agroupofmethodsdefmethod1..enddefmethod2..endenddefmethod3..endend...但是这样做真的可以吗?method1和method2最终与method3是同一种东西吗?还是有一些我还没有见过的用于执行此操作的Ruby惯用语? 最佳答案 正如其他人所说,这不会改变方法定义。但是,如果要标记方法组,为什么不使用Ruby语义来标记它们呢?您可以使用
什么是Linq聚合方法的ruby等价物。它的工作原理是这样的varfactorial=new[]{1,2,3,4,5}.Aggregate((acc,i)=>acc*i);每次将数组序列中的值传递给lambda时,变量acc都会累积。 最佳答案 这在数学以及几乎所有编程语言中通常称为折叠。它是更普遍的变形概念的一个实例。Ruby从Smalltalk中继承了这个特性的名称,它被称为inject:into:(像aCollectioninject:aStartValueinto:aBlock一样使用。)所以,在Ruby中,它称为inj