0

我正在记录用户对我的平台的日常使用情况。

mongodb中的文档结构是这样的:

_id: X
day1:{
    loginCount = 4
    someDict { x:y, z:m }
    }
day2:{
    loginCount = 5
    someDict { a:b, c:d }
    } 

然后,我需要获取属于用户 X 的最后 2 天的用户统计信息。

如何获取天数大于两天前的值?(比如使用 '$gte' 命令?)

4

2 回答 2

3

好的,如果你坚持这个方案,试试这个:

{
_id: Usemongokeyhere
userid: X
days: [
         {day:IsoDate(2013-08-12 00:00), 
          loginCount: 10,
          #morestuff
         },
         {day:IsoDate(2013-08-13 00:00), 
          loginCount: 11,
          #morestuff
         },
      ]
},
#more users

然后你可以像这样查询:

db.items.find(
    {"days.day":{$gte:ISODate("2013-08-30T00:00:00.000Z"),
                $lt: ISODate("2013-08-31T00:00:00.000Z")
                }
    }
)
于 2013-09-05T10:45:02.793 回答
2

除非问题有任何变化,否则我将根据此模式进行回答。

_id: X
day1:{
   loginCount:4
   someDict:{ x:y, z:m }
}
day2:{
  loginCount:5
  someDict:{ a:b, c:d }
} 

答案

属于用户 X 的最近 2 天的用户统计信息。

使用这种结构,您无法使用 $gte 之类的运算符从 mongo 方面获得它,因为您可以在查询用户 X 时获得一整天的时间。该文档包含有关所有日期的信息,并且我认为将动态值作为键是一种不好的做法. 您可以通过定义 db.collection.find({_id:X},{day1:1,day2:1}) 等字段来检索文档

但是,您必须知道密钥是什么,而且我不确定您如何将 day1 和 day2 保留为密钥 iso 日期、时间戳?根据您持有它的方式,您可以通过将昨天和昨天写为日期字符串或时间戳来在查询中写入字段,并获取所需的信息。

于 2013-09-04T21:33:24.273 回答