在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服务器上这样做,因为我有大量的数据集。
有什么建议可以更有效地做到这一点吗?您可以使用javascript执行相同的逻辑并在服务器上执行,但它不会更快。如果你的c#客户端有快速的带宽到服务器,这将是更好的选择。为了优化它,您可以分别通过SellsToUserId和BuysFromUserId对两个查询进行排序,并通过两个类似于合并排序算法的游标进行迭代,当sellToCursor到达末尾时可以停止。