MongoDB - 如何从集合中查询嵌入式文档
Posted
技术标签:
【中文标题】MongoDB - 如何从集合中查询嵌入式文档【英文标题】:MongoDB - How to query Embedded Documents from a collection 【发布时间】:2011-05-15 18:22:08 【问题描述】:Gurus - 我陷入了一种情况,我无法弄清楚如何从以下集合“users”中查询,它有 2 个嵌入文档“signup”和“活动”:
"appid": 2,
"userid": 404915,
"signup":
"dt": "2010-12-28",
"platform": 2
,
"activity":
"dt": "2010-12-28",
"platform": 3,
"login_count": 8,
"game_completed": 13
,
"dt": "2010-12-30",
"platform": 3,
"login_count": 8,
"game_completed": 13
,
"dt": "2010-12-31",
"platform": 3,
"login_count": 8,
"game_completed": 13
,"appid":2,"userid":404915...
我需要查询:
在 Date 和 Date+7 之间注册并在 Date 内登录的用户的唯一登录名
然后:
在Date和Date+7之间注册,在Date+7和Date+14之间登录的用户的唯一登录
请指导我如何在任何示例/示例中实现这一点?基于此将非常有帮助:-)
非常感谢!
【问题讨论】:
"activity"
怎么可能是一个字典而不是一个列表?
【参考方案1】:
这是您获得第一个查询结果的方式:
var start = new Date(2010, 11, 25);
var end = new Date(2010, 12, 1);
db.users.distinct("userid", "signup.dt" : $gte: start, $lte: end,
"activity" : "$elemMatch" : dt: $gte: start, $lte: end);
第二个是在活动结束后的日期加上开始日期和结束日期的7天。
【讨论】:
这里还有一个问题,我看了RockMongo,有添加activity子文档后添加的keys:"activity":"0":"dt":"2010-12-30 "...,"1": "dt": "2010-12-29"... ... 上面的查询能解决这个问题吗? 如果子文档以这种方式构建,我认为它不会起作用。如果密钥在子文档中,它应该可以工作:“activity”:[“key”:“0”,“dt”:“2010-12-30”...,“key”:“1 ", "dt": "2010-12-29"... ] ...以上是关于MongoDB - 如何从集合中查询嵌入式文档的主要内容,如果未能解决你的问题,请参考以下文章