我正在使用以下文档结构跟踪各个域的状态。这是在两次检查/更新之间的某个时间注册的域的示例。
{
"_id" : ObjectId("..."),
"domain" : "example.com", // fake data
"history" : [ // every time the status is updated it's added here
{
"date" : ISODate("..."), // date status updated
"status" : "inactive", // unregistered
},
{
"date" : ISODate("..."),
"status" : "active" // registered
}
],
"length" : 11,
"status" : "active"
}
我想查找过去一周内已注册的域名。此查询查找在我的数据库中的某个位置处于非活动状态和活动状态的域。
db.domains.find({'history.status': {$all: ['inactive', 'active']}})
我只想查找按照我输入的顺序处于非活动状态和活动状态的域,否则它还会返回已可用的域。我还想只搜索最近的历史记录(确切地说是一周)。这可以用一个查询吗?
编辑:已实现我可以简单地要求域的当前(最近)状态为“活动”,以便仅获取最近可用性更改的注册,并且不可用。这解决了一个问题,但时间限制仍然是一个问题。
db.domains.find({'history.status': {$all: ['inactive', 'active']}, status: 'active'})
编辑2:我看错了。 以下查询执行我想要的内容:
db.domains.find({history: {$elemMatch: {status: 'inactive', date: {$gte: <week ago>}}}, status: 'active'})
如果有人有更优雅的解决方案,我会打开这个问题。