MongoDB Select中的多个逻辑条件

时间:2016-06-14 06:32:36

标签: c# mongodb mongodb-query mongodb-.net-driver

我需要根据多个条件查询集合

我的收藏

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

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

错误:

  

错误1&#39; MongoDB.Driver.IMongoCollection&#39;   不包含&#39;查找&#39;的定义和最好的扩展方法   超载   &#39; MongoDB.Driver.IMongoCollectionExtensions.Find(MongoDB.Driver.IMongoCollection,   System.Linq.Expressions.Expression&gt;中   MongoDB.Driver.FindOptions)&#39;有一些无效的   参数....()

条件:

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

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

请帮助我。

1 个答案:

答案 0 :(得分:0)

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

收集为EducationMetaModel。和构建器作为BsonDocument。保持这些一致。
从我在过滤器中看到的内容,您可以拥有

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

另外,您最好解析对象ID,而不是将其作为字符串传递给过滤器。像这样的东西

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