【问题标题】:MongoDB - How to query Embedded Documents from a collectionMongoDB - 如何从集合中查询嵌入式文档
【发布时间】: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" 怎么可能是一个字典而不是一个列表?

标签: collections mongodb documents


【解决方案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"...} ] ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 2015-02-06
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
相关资源
最近更新 更多