2016-06-14 4 views
1

Ich brauche eine Sammlung zur Abfrage basierend auf Multiple ZustandMehrere Logische Bedingungen in MongoDB Select

Meine Sammlung

{ 
    "_id" : ObjectId("575f4e2efd14481598fc0ebf"), 
    "Emp_ID" : "100", 
    "LastUpdate" : ISODate("2016-06-13T18:30:00.000Z") 
}, 
{ 
    "_id" : ObjectId("575f4e2efd14481598fc0ebf"), 
    "Emp_ID" : "101", 
    "LastUpdate" : ISODate("2016-06-14T06:33:00.000Z") 
}, ...() 

Jetzt muß ich das Dokument prüfen ist vorhanden oder nicht, basierend auf meinem unten Zustand

Mein C# Code:

private static IMongoClient _client; 
private static IMongoDatabase _database; 

_client = new MongoClient(); 
_database = _client.GetDatabase("Test"); 

var collection = _database.GetCollection<EducationMetaModel>("EmpLog"); 

var filterBuilder = Builders<BsonDocument>.Filter; 
var filter = filterBuilder.Eq("_id", token.Token) 
       & filterBuilder.Eq("Emp_ID", token.UserToken) 
       & filterBuilder.Gte("LastUpdate", DateTime.UtcNow.Add(new TimeSpan(0, -15, 0))); 

var cItem = collection.Find(filter); 

Aber ich bin immer erro bauen r aus dem obigen Code. Bitte hilf mir. Ich muss prüfen, ob das Dokument verfügbar ist oder nicht, basierend auf dem Filter.

Fehler:

Error 1 'MongoDB.Driver.IMongoCollection' does not contain a definition for 'Find' and the best extension method overload 'MongoDB.Driver.IMongoCollectionExtensions.Find(MongoDB.Driver.IMongoCollection, System.Linq.Expressions.Expression>, MongoDB.Driver.FindOptions)' has some invalid arguments ....()

Zustand:

var token = new { 
    Token = ObjectId("575f4e2efd14481598fc0ebf"), 
    UserToken = "101" 
}; 

Ich brauche die Token-Daten zu überprüfen, zusammen mit einer Bedingung vorhanden sind, sollte die Lastupdate größer als oder gleich (aktuelle Zeit - 15 Min).

Bitte helfen Sie mir.

Antwort

0

Der Typ des Builders muss mit dem Typ der Sammlung übereinstimmen. In Ihrem Fall haben Sie

Sammlung als EducationMetaModel. und Erbauer als BsonDocument. halte diese konsistent.
Von dem, was ich in Ihrem Filter sehen können, könnten Sie

var collection = _database.GetCollection<BsonDocument>("EmpLog"); 

Auch sind Sie besser dran Objekt-ID Parsen es als String Ihre Filter haben nur als vorbei. etwas wie das

var filter = filterBuilder.Eq("_id", ObjectId.Parse("57623ed9adb381a5cc0d1994"))