如何在mongo db

时间:2017-02-03 07:19:09

标签: arrays node.js mongodb mongoose

这是集合的结构

{
"userid": "c7ff591eda700a6d159fe74677f02c98",
"__v": 0,
"created": "2017-02-02T09:35:55.372Z",
"schedules": [
  {
    "description": "demo event",
    "scheduled": "2/1/17 3:05 PM"
  },
  {
    "scheduled": "1/25/17 3:06 PM",
    "description": "demo event 2"
  },
  {
    "scheduled": "2/4/17 3:06 PM",
    "description": "demo event 3"
  },
  {
    "scheduled": "2/1/17 3:10 PM",
    "description": "demo"
  },
  {
    "scheduled": "2/9/17 3:10 PM",
    "description": "demo2"
  },
  {
    "scheduled": "2/1/17 3:23 PM",
    "description": "das"
  },
  {
    "scheduled": "2/3/16 3:30 PM",
    "description": "call ted"
  },
  {
    "scheduled": "2/3/16 3:30 PM",
    "description": "call ted"
  },
  {
    "scheduled": "2/3/16 3:30 PM",
    "description": "call ted"
  }
]

}

我只想获取在当前日期和时间之后安排的数据。

我也试过

  db.<collection name>.find({"userid":c7ff591eda700a6d159fe74677f02c98},
          {schedules:{$elemMatch:{scheduled:{$gte:'2/1/17 4:00 PM'}}}});

这句话返回仅在那个1 feb之后安排的返回 &#34;演示事件3&#34;。

      db.<collection name>.find({"userid":c7ff591eda700a6d159fe74677f02c98,
         'schedules.scheduled':{$gte:'2/1/17 4:00 PM'});

此查询返回整个集合。 有人请帮帮我..

1 个答案:

答案 0 :(得分:0)

当我们使用下面的查询时,它会在当前文档中找到匹配后跳转到集合中的另一个文档。

  db.<collection name>.find({"userid":c7ff591eda700a6d159fe74677f02c98},
      {schedules:{$elemMatch:{scheduled:{$gte:'2/1/17 4:00 PM'}}}});

解决这个问题我们可以使用

       var date = '2/1/17 3:40 PM';
      db.<collection_name>.aggregate([
       {'$match':{'schedules':{'$elemMatch': 
         {"scheduled":{'$gte': date}}}}},
           {'$unwind':'$schedules'},
             {'$match':{"schedules.scheduled":{"$gte":date}}},
                {'$group':{'_id':"$_id",'schedules':
                  {'$addToSet':'$schedules'}}}])

它将返回给定日期字符串中将来的所有日程表。