如何查询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。
自2.3版c#驱动程序以来,可以在FilterDefinition<T>
:
var filter = Builders<BsonDocument>.Filter.Eq("testProperty2", "almafa");
productEntityRepo.Where((dbModel) => dbModel.BrandName == "Brand" && filter.Inject());
这应该允许您表达难以或不可能通过LINQ描述的过滤器。你需要从2.2.4升级到新版本