Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB查询嵌入文档_Mongodb_Mongodb Query - Fatal编程技术网

MongoDB查询嵌入文档

MongoDB查询嵌入文档,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个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.71

我有一个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类型的查询来解决此问题。

您可以按如下方式聚合它:

  • 初始化
    开始日期和结束日期变量
  • 匹配所需的用户ID文档
  • 展开
    项目数组
  • 使用
    $和
    操作符
    匹配日期在范围内的项目
  • 根据
    用户ID将
    分组
  • 项目
    必填字段
代码:

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"}}
])