如何查询BsonExtraElements在MongoDB通过Linq

本文关键字:MongoDB 通过 Linq BsonExtraElements 何查询 查询 | 更新日期: 2023-09-27 18:07:53

我使用mongodb [BsonExtraElements]功能来扩展我的类一些动态数据,但不幸的是,我无法通过mongodb c#驱动程序创建查询。

这是我的模型类:
public class MongoProductEntity 
{
    public MongoProductEntity()
    {
        AdditionalColumns = new BsonDocument { AllowDuplicateNames = false };
    }
    [BsonExtraElements]
    public BsonDocument AdditionalColumns { get; set; }
    public string BrandName { get; set; }
}

下面是查询部分:

        var productEntity = new MongoProductEntity ()
        {
            BrandName = "Brand"
        };            
        productEntity.AdditionalColumns.Add("testProperty", 6);
        productEntity.AdditionalColumns.Add("testProperty2", "almafa");
        await productEntityRepo.InsertAsync(productEntity);
        var qq = productEntityRepo.Where(x => x.AdditionalColumns["testProperty"] == 6).ToList();

这个查询从数据库返回没有一个元素,但是,如果我试图查询BrandName属性一切都很好!

是否有人面临类似的情况或知道为什么该查询不工作?提前感谢!

这里只是一个简短的注释:productEntityRepo的类型是MongoDb MongoProductEntity集合的包装器,这个包装器返回集合作为Queryable,这就是全部。我使用MongoDb 3.2.9,与最新的c#驱动2.2.4。

如何查询BsonExtraElements在MongoDB通过Linq

自2.3版c#驱动程序以来,可以在FilterDefinition<T>:

上使用.Inject()方法。
var filter = Builders<BsonDocument>.Filter.Eq("testProperty2", "almafa");
productEntityRepo.Where((dbModel) => dbModel.BrandName == "Brand" && filter.Inject());

这应该允许您表达难以或不可能通过LINQ描述的过滤器。你需要从2.2.4升级到新版本