2017-06-05 9 views
1

redactとそれに続くプロジェクトを含むC#ドライバを使用してmongodb集約パイプラインを作成しようとしています。私は以下に示すいくつかの方法を試しましたが、パイプラインの最初の段階だけが実行されます。 AppendStageは次のステージを追加するようには見えません。では、C#mongodbドライバを使ったプロジェクトの後に、どのようにredactを持っていますか?流暢なインターフェースはredactを直接サポートしていませんが、別の投稿では以下のコードを使って最初の段階で動作することが示されています。

私はC#のドライバとMongoDBのバージョン私の集約JSONはこれら

のように見えるこの

var pipeline = collection.Aggregate().AppendStage<BsonDocument>(redact); 
pipeline.AppendStage<BsonDocument>(project); 
var list = pipeline.ToList(); 

などの3.4.4

string redactJson = System.IO.File.ReadAllText(@"redactTest.json"); 
string projectJson = System.IO.File.ReadAllText(@"projectTest.json"); 

var collection = Database.GetCollection<BsonDocument>("Forecasts"); 

var redact = BsonDocument.Parse(redactJson); 
var project = BsonDocument.Parse(projectJson); 


var aggregatonPipeline = collection.Aggregate(); 
aggregatonPipeline.AppendStage<BsonDocument>(redact); 
aggregatonPipeline.AppendStage<BsonDocument>(project); 

var list = aggregatonPipeline.ToList(); 

または類似したコードの2.4.3バージョンを使用しています

redactTest.json:

{ 
    $redact: { 
     $cond: { 
     if: { 
      $gt: [{ $size: { "$setIntersection": [ "$tags", ["STLW", "G"]]}}, 0] 
     }, 
     then: "$$DESCEND", 
     else: "$$PRUNE" 
     } 
    } 
} 

projectTest.json

{ 
    "$project": 
    { 
    "_id": 0, 
    "title": 1, 
    "year": 1, 
    "subsections.subtitle": 1, 
    "subsections.content": 1 
    } 
} 

ソースドキュメントは

{ 
    _id: 1, 
    title: "123 Department Report", 
    tags: [ "G", "STLW" ], 
    year: 2014, 
    subsections: [ 
    { 
     subtitle: "Section 1: Overview", 
     tags: [ "SI", "G" ], 
     content: "Section 1: This is the content of section 1." 
    }, 
    { 
     subtitle: "Section 2: Analysis", 
     tags: [ "STLW" ], 
     content: "Section 2: This is the content of section 2." 
    }, 
    { 
     subtitle: "Section 3: Budgeting", 
     tags: [ "TK" ], 
     content: { 
     text: "Section 3: This is the content of section3.", 
     tags: [ "HCS" ] 
    } 
    } 
] 
} 

答えて

2

collection.Aggregate()が流暢集約インターフェースを公開し、メソッドチェーンを介してパイプラインにステージを追加です。一度に一つのステージを追加するとき

何か

var pipeline= collection.Aggregate().AppendStage<BsonDocument>(redact).AppendStage<BsonDocument>(project); 
var list = pipeline.ToList(); 

のようなあなたの使用量は、前のステージが上書きされます。

+0

これは機能します。それぞれの段階を証明してそれらを追加しようとする私の試みは良い考えではありませんでした。 – KenB

関連する問題