使用mongoaggregation如何检查每天更新的数据

时间:2018-04-13 06:39:07

标签: javascript mongodb mongoose aggregation-framework monodevelop

我的mongodb数据集是如何一次检查所有收集数据插入的 我尝试这个代码,我得到了一个收集数据,但如何一次检查收集数据的数量。

db.collection.find({  
   $where:function () {  
      return Date.now() - this._id.getTimestamp() < (24 * 60 * 60 * 1000)
   }
})

1 个答案:

答案 0 :(得分:0)

更新1:

如果要对MongoDb数据库中的所有集合应用查询,可以发出如下查询:;

db.getCollectionNames().forEach(function(n) { 
  print(n + ":" + db[n].count());
});

上面的查询将为您计算MongoDB数据库中的所有集合。

原帖

如果您的业务问题是根据时间戳知道白天插入了多少条记录,您可以使用map reduce框架使用_id字段中存储的ObjectId计算每天的记录数。此聚合将包含插入数据的所有日期。

您必须拥有一个JS函数,它将ID转换为日期字符串,将其保存在db.system.js集合中,然后对相应的集合执行mapReduce调用。

以下是此代码:

var dateFromObjectId = function (objectId) {
  var d = objectId.getTimestamp();
  return (d.getYear() + 1900) + "-" + (d.getMonth() + 1) + "-" + d.getDate();
};

db.system.js.save({ "_id": "dateFromObjectId", "value": dateFromObjectId });

db.metrics.mapReduce(
    function() {
        emit(dateFromObjectId(this._id), 1);
    },
    function(key, values) {
        return Array.sum(values);
    },
    { "out": { "inline": 1 } }
)

这将打印出类似这样的内容:

  {
    "results": [{
            "_id": "2018-0-2",
            "value": 10628
        },
        {
            "_id": "2018-0-3",
            "value": 13835
        },
        {
            "_id": "2018-0-4",
            "value": 11624
        },
        {
            "_id": "2018-0-5",
            "value": 8983
        },
        {
            "_id": "2018-0-6",
            "value": 1076
        },
        {
            "_id": "2018-1-0",
            "value": 25771
        },
        {
            "_id": "2018-1-1",
            "value": 20498
        },
        {
            "_id": "2018-1-2",
            "value": 4703
        },
        {
            "_id": "2018-1-3",
            "value": 12738
        },
        {
            "_id": "2018-1-4",
            "value": 23840
        },
        {
            "_id": "2018-1-5",
            "value": 25888
        },
        {
            "_id": "2018-1-6",
            "value": 25377
        },
        {
            "_id": "2018-2-0",
            "value": 2183
        }
    ],
    "timeMillis": 5528,
    "counts": {
        "input": 599471,
        "emit": 599471,
        "reduce": 1941,
        "output": 63
    },
    "ok": 1
  }