在MongoDB中执行set difference

本文关键字:set difference 执行 MongoDB | 更新日期: 2023-09-27 18:17:35

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

例如:

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服务器上这样做,因为我有大量的数据集。

有什么建议可以更有效地做到这一点吗?

在MongoDB中执行set difference

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