MongoDB Select 中的多个逻辑条件

Multiple Logical Conditions in MongoDB Select

我需要根据多个条件

查询Collection

我的Collection

{
    "_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);

但是我从上面的代码中得到了构建错误。请帮助我。我需要根据过滤器检查文档是否可用。

错误:

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"
};

我需要检查令牌数据是否存在以及 LastUpdate 应大于或等于(当前时间 - 15 分钟)的一个条件。

请帮助我。

Builder 的类型必须与 Collection 的类型相同。在你的情况下你有

作为 EducationMetaModel 的集合。和构建器作为 BsonDocument。保持一致。
从我在你的过滤器中看到的,你可以

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

此外,解析对象 ID 比将其作为字符串传递给过滤器要好。像这样

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