首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据上一次时间戳和使用MongoDB的其他过滤器从集合中获取BsonDocument

如何根据上一次时间戳和使用MongoDB的其他过滤器从集合中获取BsonDocument
EN

Stack Overflow用户
提问于 2021-11-29 20:15:09
回答 2查看 172关注 0票数 0

对于一个建筑安全系统,我想得到最后一次刷卡的时间,为一个特定的学生根据他们的身份证序列号。我正在使用这个代码

代码语言:javascript
复制
var _collection = database.GetCollection<BsonDocument>("entrycard_swipetimes");
var filter = Builders<BsonDocument>.Filter.Eq("studentid", "stu-1234") & Builders<BsonDocument>.Filter.Eq("Carddetails.LastSwipeTimestamp", "2021-11-25T10:50:00.5230694Z");
var doc = _collection.Find(filter).FirstOrDefault();

这是json文档的片段。

代码语言:javascript
复制
{
  "studentid"; "stu-1234",
  "Carddetails": 
   { 
      "LastSwipeTimestamp": "2021-11-25T10:50:00.5230694Z"
    }
}

上面的代码正常工作,我得到了一条记录,但我需要提前知道确切的时间字符串。怎样才能得到最后一次学生刷卡的机会?我如何获得系统中所有学生的最后一个时间戳,并在过去30天中每次由20名学生传呼?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-29 20:34:40

修改Filter并添加一个排序:

代码语言:javascript
复制
var filter = Builders<BsonDocument>.Filter.Eq("studentid", "stu-1234");

var doc = _collection.Find(filter).Sort("{\"Carddetails.LastSwipeTimestamp\":-1}").FirstOrDefault();

强烈建议将Carddetails.LastSwipeTimestamp更改为实时日期类型,而不是ISO8601字符串。

票数 1
EN

Stack Overflow用户

发布于 2021-11-29 21:31:01

为了获得最后一次特定学生(studentId)刷卡的机会:

代码语言:javascript
复制
var filter = Builders<BsonDocument>.Filter.Eq("studentid", studentId);
var doc = collection
    .Find(filter)
    .SortByDescending(bson => bson["Carddetails.LastSwipeTimestamp"])
    .FirstOrDefault();

要获得系统中所有学生的最后一个时间戳,并让pageSize学生在过去的lastDaysCount天中一次传呼:

代码语言:javascript
复制
var doc = collection
    .Aggregate()
    .Group(new BsonDocument
    {
        { "_id", "$studentid" },
        {
            "LastSwipeTimestamp", new BsonDocument
            {
                { "$max", "$Carddetails.LastSwipeTimestamp" }
            }
        },
    })
    .Match(bson => bson["LastSwipeTimestamp"] > DateTime.Now.AddDays(-lastDaysCount))
    .Skip((page - 1) * pageSize)
    .Limit(pageSize)
    .ToList();

但是,要使其工作,您应该将您的日期存储为Date类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70160799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档