Da wir gezwungen waren, unsere Mongo-Installation zu aktualisieren, wird bei einigen Aggregationsfunktionsaufrufen ein Fehler angezeigt:

MongoDB.Driver.MongoCommandException: "Befehl 'Aggregat' fehlgeschlagen: Die Option 'Cursor' ist erforderlich, außer für das Aggregat mit dem EXPLAIN-Argument (Antwort: {" ok ": 0.0," errmsg ":" Die Option 'Cursor' ist erforderlich , außer für das Aggregat mit dem EXPLAIN-Argument "," Code ": 9," CodeName ":" FailedToParse "})"

        BsonArray arr = BsonSerializer.Deserialize<BsonArray>("[{ \"$match\" : { \"Param1\" : \"VAL\" } }, { \"$unwind\" : \"$Entries\" }, { \"$match\" : { \"PARAM\" : \"VALUE\" } }]");
        var pipeline = arr.Select(x => x.AsBsonDocument).ToList();
        // AggregateArgs aArgs = new AggregateArgs { Pipeline = bsonList };
        var cursor = collection.Aggregate(pipeline).ResultDocuments;

Ich habe bereits herausgefunden, dass wir dem BsonDocument manuell eine Cursorkonfiguration hinzufügen müssen - aber wir konnten nicht herausfinden, wie die Abfrage konfiguriert werden sollte.

Gibt es eine Lösung für diese Ausnahme (ohne Treiberwechsel)?

2
user3066027 19 Feb. 2020 im 15:00

3 Antworten

Beste Antwort

Konnte es endlich beheben, indem ich den Befehl selbst erstellte:

        var cmd = new CommandDocument()
        {
            {"aggregate", "collection_name" },
            {"pipeline",  arr},
            {"cursor", BsonDocument.Parse("{}") }
        };

        var res = db.RunCommand(cmd);
0
user3066027 19 Feb. 2020 im 13:11

Probieren Sie es aus:

var cursor = collection.Aggregate<BsonDocument>(pipeline);

var results = cursor.ToList(); //just get a list of documents and be done with it

while (cursor.MoveNext()) // or iterate over cursor
{
    foreach (var doc in cursor.Current.ToArray())
    {
        //access your documents here
    }
}
0
Đĵ ΝιΓΞΗΛψΚ 19 Feb. 2020 im 13:12

Sie haben eine zusätzliche Klammer am Ende der Abfragezeichenfolge

0
Dmitry 19 Feb. 2020 im 12:12