MongoDB - 如何从集合中查询嵌入式文档

10

各位高手,我遇到了一个问题,不知道如何从以下集合 "users" 中查询,它包含两个嵌套文档 "signup" 和 "activity":

{
    "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...}

我需要查询:

在日期和日期+7之间注册并在日期内登录的用户的唯一登录

然后:

在日期和日期+7之间注册,并在日期+7和日期+14之间登录的用户的唯一登录

请指导我如何实现此操作,有任何示例或样本将非常有帮助:-)

非常感谢!


“activity”怎么可能是字典而不是列表? - Xiao
1个回答

8

以下是如何获取您的第一个查询结果:

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”:{“0”:{“dt”:“2010-12-30”…},“1”:{“dt”:“2010-12-29”…}}。上面的查询能用吗? - Syed Kamran Haider
如果子文档的结构是这样的,我认为它不会起作用。如果键在子文档中,则应该可以工作: "activity": [ { "key" : "0", "dt": "2010-12-30"...}, { "key" : "1", "dt": "2010-12-29"...} ] ... - Jeff the Bear

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接