必要なマッピングを実行する方法を見つけました:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList();
ただし、最初に、余分な要素を無視してサブタイプのマッピングを登録する必要があります。私はそれを100%理解していません、ドライバーのバグのようです、それはDocuments
を取得しません mongoからですが、そのMyType
そのような特性を持っています。 前にクラスマッピングを登録する必要があることに注意してください 最初にこのタイプのコレクションを作成します。
if (!BsonClassMap.IsClassMapRegistered(typeof(MySubType)))
{
BsonClassMap.RegisterClassMap<MySubType>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
}
サンプルデータでやりました:
var toInsert = new List<MyType>
{
new MyType {Id = 1, Name = "bla", Documents =new List<string> {"a", "b", "v"}},
new MyType {Id = 2, Name = "ada", Documents =new List<string> {"c", "d", "r"}},
};
そして、期待される出力を得ることができます:
collection
.Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
.Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
.As<MySubType>()
.ToList()
.Dump();