【问题标题】:Multiple Logical Conditions in MongoDB SelectMongoDB Select 中的多个逻辑条件
【发布时间】:2016-06-14 06:32:35
【问题描述】:

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

我的收藏

{
    "_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 ​​'MongoDB.Driver.IMongoCollection' 不包含“查找”的定义和最佳扩展方法 超载 'MongoDB.Driver.IMongoCollectionExtensions.Find(MongoDB.Driver.IMongoCollection, System.Linq.Expressions.Expression>, MongoDB.Driver.FindOptions)' 有一些无效 论点 .... ()

条件:

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

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

请帮助我。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      相关资源
      最近更新 更多