在MongoDB中执行设置差异

时间:2011-12-11 21:08:43

标签: c# mongodb mongodb-.net-driver

我有两个不同的集合,有一个共同的字段,比如UserId。还有其他属性可以限定UserIds。

例如:

Collection 1: {UserId, SellsToUserId}

Collection 2: {UserId, BuysFromUserId}

我想运行一个操作,让我区分两组。

示例查询将是: 获取给定UserId销售的所有UserID,但不购买。

伪代码解决方案

var sellToCursor = collection1.Find(Query.EQ("UserId", Me)).SetFields({SellsToUserId});

var buyFromCursor = collection2.Find(Query.EQ("UserId", Me)).SetFields({BuysFromUserId});

SellToButDontBuyFrom[] = sellTo - buyFrom;   //definitely pseudocode here.

我想在MongoDB服务器上执行此操作,因为我有大量数据。

有效建议吗?

1 个答案:

答案 0 :(得分:3)

您可以使用javascript执行相同的逻辑并在服务器上执行它,但它不会更快。如果您的C#客户端具有到服务器的快速带宽,那将是更好的选择。要对其进行优化,您可以分别按SellsToUserId和BuysFromUserId对两个查询进行排序,并通过两个类似于合并排序算法的游标进行迭代,您可以在sellToCursor到达终点时停止。