我使用MongoDB存储一些数据。文档有一些必填字段和一组可选字段。可以有任意数量的可选字段(这是元数据):
class DataItem {
public int id {get; set;}
public string Comment { get; set; }
[BsonExtraElementsAttribute]
BsonDocument Metadata { get; set; }
}
不同文档的元数据字段名称可能不同,所以我不知道这些名称。
我需要查询此类文档,其中元数据的任何字段都包含特定值。
我试过了:
var query = "<some value>";
var res = collection.Find(di => di.Metadata.ContainsValue(BsonValue.Create(query))).ToListAsync();
但是这段代码抛出了异常,因为那里不支持ContainsValue()方法。当我尝试这个时:
var res = collection.Find(di => di.Metadata.Values.Contains(BsonValue.Create(query))).ToListAsync();
返回空结果集。我认为问题出在[BsonExtraElementsAttribute]中,但我无法改变它。有办法吗?