如何忽略我认为基于属性的重复结果?

问题描述 投票:1回答:2

可能有点远,但是我们开始吧。假设我有以下文档定义:

公共课程Test1 {公共ObjectId ID {get; set;}公共诠释NonUniqueId {get;组; }公共字符串名称{get;组; }公共十进制价格{组; }}

使用IMongoCollection<Test1>,我可以过滤结果以记录其中Name = "somevalue"的结果,按Price排序并仅返回10行。

var builder = Builders.Filters;var filter = builder.Where(x => x.Name ==“ somevalue”);var result = await collection.Find(filter).SortBy(x => x.Price).Limit(10).ToListAsync();

现在要解决的问题。如果过滤器返回了一个以上的文档(Name = "somevalue"),并且该集合中NonUniqueId出现了多次,则我想排除重复的NonUniqueId,仅返回具有最低Price的文档。

此逻辑在代码中非常容易实现:如果其中10个结果是“重复项”(即NonUniqueId出现多次),则获取10个结果,以最小的价格保留结果,然后进行除此以外的另一次搜索[ C0]。但是,它需要多个DB调用,这并不好(在最坏的情况下,最多可达10个)。

在MongoDB中(使用C#驱动程序),有没有一种方法可以忽略基于属性的这些“重复”结果,并且理想情况下,仅返回另一个属性的最小值(或具有相同效果的任何东西?]]

可能有点远,但是我们开始吧。假设我有以下文档定义:public class Test1 {public ObjectId Id {get; set;} public int NonUniqueId {get;组; } ...

c# mongodb mongodb-query mongodb-.net-driver
2个回答
0
投票

尝试NonUniqueId方法,如Distinct答案所示。您甚至可以定义一个自定义this函数(通过定义实现Equals的类)来执行您需要执行的检查]


0
投票

尝试一下此管道:

© www.soinside.com 2019 - 2024. All rights reserved.