我有两个不同的集合,有一个共同的字段,比如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服务器上执行此操作,因为我有大量数据。
有效建议吗?
答案 0 :(得分:3)
您可以使用javascript执行相同的逻辑并在服务器上执行它,但它不会更快。如果您的C#客户端具有到服务器的快速带宽,那将是更好的选择。要对其进行优化,您可以分别按SellsToUserId和BuysFromUserId对两个查询进行排序,并通过两个类似于合并排序算法的游标进行迭代,您可以在sellToCursor到达终点时停止。