MongoDB 驱动程序查询 * 过滤器定义生成器 * Nin $nin 不在过滤器中

80s*_*ker 3 c# mongodb mongodb-query

有没有人使用过 C# .Net MongoDB Driver FilterDefinitionBuilder's not in filter?这是我放在一起的一个简单示例,但我似乎无法开始工作。假设我们必须保持集合原样。目标是仅检索不在指定 ArtistGenresDocument 列表中的 ArtistDetailsDocument。

该代码不会编译并声明“无法将 lambda 表达式转换为类型 'MongoDB.Driver.FieldDefinition ArtistDetailsDocument,ArtistGenresDocument',因为它不是委托类型”。

感谢帮助!\毫米/

public class ArtistDetailsDocument
{
    public ObjectId Id { get; set; }
    public String artist_ID { get; set; }
    public String artistName { get; set; }
}

public class ArtistGenresDocument
{
    public ObjectId Id { get; set; }
    public String artist_ID { get; set; }
    public String genre { get; set; }
}

IEnumerable<ArtistGenresDocument> list = await ArtistGenresCollection.Find(x => x.genre == "Pop" | x.genre == "Easy Listening").ToListAsync();

var filter = Builders<ArtistDetailsDocument>.Filter.Nin<ArtistGenresDocument>(x => x.artist_ID, list);

var ArtistDetailsDocuments = ArtistDetailsCollection.Find(filter);
Run Code Online (Sandbox Code Playgroud)

80s*_*ker 5

这是在 pieperu 帮助下的解决方案!

IEnumerable<ArtistGenresDocument> list = await ArtistGenresCollection
    .Find(x => x.genre == "Pop" || x.genre == "Easy Listening")
    .ToListAsync();

var filter = Builders<ArtistDetailsDocument>
    .Filter
    .Nin(x => x.artist_ID, list.Select(l => l.artist_ID));

var ArtistDetailsDocuments = await ArtistDetailsCollection
    .Find(filter)
    .ToListAsync();

public class ArtistDetailsDocument
{
    public ObjectId Id { get; set; }
    public String artist_ID { get; set; }
    public String artistName { get; set; }
}

public class ArtistGenresDocument
{
    public ObjectId Id { get; set; }
    public String artist_ID { get; set; }
    public String genre { get; set; }
}
Run Code Online (Sandbox Code Playgroud)