2016-06-14 10 views
1

私は、複数の条件に基づいてコレクションを照会する必要がMongoDBの選択で複数の論理条件

マイコレクション

{ 
    "_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") 
}, ...() 

今私は、ドキュメントをチェックする必要が私の下の条件

に基づいて存在しないかではありません

私のC#コード:

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); 

しかし、私はERROを構築取得していますr上記のコードから。親切に私を助けてください。私は、ドキュメントがフィルタに基づいて利用可能かどうかをチェックする必要があります。

エラー:

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 ....()

条件:

私はトークンのデータが最終更新は以上でなければならない一つの条件と一緒に存在してチェックする必要があり
var token = new { 
    Token = ObjectId("575f4e2efd14481598fc0ebf"), 
    UserToken = "101" 
}; 

(現在時刻 - 15分)。

私を助けてください。

答えて

0

ビルダーのタイプは、コレクションのタイプと同じでなければなりません。あなたの場合は

コレクションをEducationMetaModelとして持っています。 BsonDocumentとしてのビルダー。これらの一貫性を保つ。私はあなたのフィルターで見ることができるものから
、あなただけのも、あなたのフィルタに文字列として渡すよりも、オブジェクトIDを解析する方がいいでしょう

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

を持つことができます。このようなもの

var filter = filterBuilder.Eq("_id", ObjectId.Parse("57623ed9adb381a5cc0d1994")) 
関連する問題