2016-07-04 12 views
0

Ich bin ziemlich neu zu MongoDB und der MongoDB C# -Treiber.MongoDB stark typisierten Filter und Find()

Um den Code lesbarer (und zuverlässiger) zu machen, habe ich mich entschieden, stark typisierte Objekte auszuprobieren. Deshalb habe ich ein POCO ...

erstellt. Nur Id und Payload sind zunächst in der Datenbank vorhanden.

internal class MongoDbRepositoryItem 
{ 
    [BsonId] 
    public string Id { get; set; } 

    [BsonElement("rawdata")] 
    public byte[] Payload { get; set; } 
    public string ProcessingStatus { get; set; } 
    public DateTime ProcessingStarted { get; set; } 
    public int ProcessingAttempts { get; set; } 
} 

Nun gibt es mehrere Operationen, die ich erreichen müssen.
Zuerst muss ich das älteste unverarbeitete Element abrufen.

Ich dachte an so etwas wie das:

var builder = Builders<MongoDbRepositoryItem>.Filter; 

// I didn't read about sorting yet. I also need the "oldest" document. 
var filter = builder.Exists(item => item.ProcessingStatus, false); 

MongoDbRepositoryItem result = await _collection.FindAsync<MongoDbRepositoryItem>(filter); 

Aber das nicht kompiliert.FindAsync() erwartet ein BsonDocument. Mein Filter ist offensichtlich stark typisiert. Ich konnte keine Antwort in der documentation finden.

Antwort

1

Der erste, was zuerst :-)

var result = await collection.FindAsync<MongoDbRepositoryItem>(filter); 
var data = result.ToList(); 

in dieser Zeile wir ein cursor und kein einzelnes Element erwarten. Mit data konvergieren wir unseren Cursor zur Liste für die spätere Verarbeitung;

Wenn wir gehen nur erste Element erhalten, dann könnten wir

MongoDbRepositoryItem result = collection.Find<MongoDbRepositoryItem>(filter).First(); 

EDIT

var b2 = new FilterDefinitionBuilder<MongoDbRepositoryItem>(); 
var f2 = b2 . Exists(x => x.ProcessingStatus, false); 
var result2 = await collection.FindAsync<MongoDbRepositoryItem>(f2); 

Alle Kommentare willkommen nutzen!

+0

Der Fehler ist "Konvertierung von FilterDefinition zu FilterDefinition " nicht möglich. Danke für den First() Hinweis, ich werde später FindOneAndUpdate() verwenden. – lapsus

+0

welche Version des Treibers verwenden Sie - ich bin nicht in der Lage zu reproduzieren .... – profesor79

+0

mongodriver = neueste (2.2.4) – lapsus

Verwandte Themen