【问题标题】:MongoDB querying for Embeded DocumentMongoDB 查询嵌入式文档
【发布时间】:2014-12-05 18:17:13
【问题描述】:

我有一个结构类似的 mongo 文档

{
"_id" : "THIS_IS_A_DHP_USER_ID+2014-11-26",
"_class" : "weight",
"items" : [
    {
        "dateTime" : ISODate("2014-11-26T08:08:38.716Z"),
        "value" : 98.5
    },
    {
        "dateTime" : ISODate("2014-11-26T08:18:38.716Z"),
        "value" : 95.5
    },
    {
        "dateTime" : ISODate("2014-11-26T08:28:38.663Z"),
        "value" : 90.5
    }
],
"source" : "MANUAL",
"to" : ISODate("2014-11-26T08:08:38.716Z"),
"from" : ISODate("2014-11-26T08:08:38.716Z"),
"userId" : "THIS_IS_A_DHP_USER_ID",
"createdDate" : ISODate("2014-11-26T08:38:38.776Z")
}
{
"_id" : "THIS_IS_A_DHP_USER_ID+2014-11-25",
"_class" : "weight",
"items" : [
    {
        "dateTime" : ISODate("2014-11-25T08:08:38.716Z"),
        "value" : 198.5
    },
    {
        "dateTime" : ISODate("2014-11-25T08:18:38.716Z"),
        "value" : 195.5
    },
    {
        "dateTime" : ISODate("2014-11-25T08:28:38.716Z"),
        "value" : 190.5
    }
],
"source" : "MANUAL",
"to" : ISODate("2014-11-25T08:08:38.716Z"),
"from" : ISODate("2014-11-25T08:08:38.716Z"),
"userId" : "THIS_IS_A_DHP_USER_ID",
"createdDate" : ISODate("2014-11-26T08:38:38.893Z")
}

要在此文档结构上触发的查询用于查找特定用户 ID 的文档,展开嵌入的数组并获取位于特定日期范围之间的对象。

可以为这样的查询创建一个聚合,否则这需要使用 map-reduce 类型的查询来解决。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    您可以将其汇总如下:

    • Initialize 开始日期和结束日期变量。
    • Match 所需的 userId 文档。
    • Unwind items 数组。
    • 使用$and 运算符match 日期范围内的项目。
    • Group 一起基于userId
    • Project 必填字段。

    代码:

    var startDate = ISODate(); // initialize the correct start date
    var endDate = ISODate();  // initialize the correct end date.
    
    db.collection.aggregate([
    {$match:{"userId":"THIS_IS_A_DHP_USER_ID"}},
    {$unwind:"$items"},
    {$match:{$and:[{"items.dateTime":{$gt:startDate}},
                   {"items.dateTime":{$lt:endDate}}]}},
    {$group:{"_id":"$userId",
             "items":{$push:"$items"},
             "_class":{$first:"$_class"},
             "source":{$first:"$source"},
             "to":{$first:"$to"},
             "from":{$first:"$from"},
             "createdDate":{$first:"$createdDate"}}},
    {$project:{"_id":0,
             "items":1,
             "_class":1,
             "source":1,
             "to":1,
             "from":1,
             "createdDate":1,"userId":"$_id"}}
    ])
    

    【讨论】:

      猜你喜欢
      • 2015-02-06
      • 2021-08-07
      • 1970-01-01
      • 2011-04-26
      • 2018-03-20
      • 2021-03-24
      • 2015-03-26
      • 1970-01-01
      相关资源
      最近更新 更多