MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB aggreagte lấp đầy những ngày còn thiếu

Sử dụng tổng hợp để xử lý câu hỏi này hoàn toàn là một khó khăn.
Nhưng có thể đạt được.
(MongoDB V2.6 + bắt buộc)

var proj1 = {
    "$project" : {
        "created" : 1,
        "_id" : 0,
        "h" : {
            "$hour" : "$created"
        },
        "m" : {
            "$minute" : "$created"
        },
        "s" : {
            "$second" : "$created"
        },
        "ml" : {
            "$millisecond" : "$created"
        }
    }
};

var proj2 = {
    "$project" : {
        "created" : {
            "$subtract" : [ "$created", {
                "$add" : [ "$ml", {
                    "$multiply" : [ "$s", 1000 ]
                }, {
                    "$multiply" : [ "$m", 60, 1000 ]
                }, {
                    "$multiply" : [ "$h", 60, 60, 1000 ]
                } ]
            } ]
        }
    }
};

var group1 = {
        $group : {
            _id : "$created",
            count : {
                $sum : 1
            }
        }
    };

var group2 = {
        $group : {
            _id : 0,
            origin : {
                $push : "$$ROOT"
            },
            maxDate : {
                $max : "$_id"
            }
        }
};

var step = 24 * 60 * 60 * 1000; // milliseconds of one day

var project3 = {
    $project : {
        origin : 1,
        extents : {
            $map : {
                "input" : [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],
                "as" : "e",
                "in" : {
                    _id : {
                        $subtract : [ "$maxDate", {
                            $multiply : [ step, "$$e"]
                        }]
                    },
                    count : {
                        $add : [0]
                    }
                }
            }
        }
    }
};

var project4 = {
        $project : {
            _id : 0,
            values : {
                $setUnion : [ "$origin", "$extents"]
            }
        }
};

var unwind1 = {
        $unwind : "$values"
};

var group3 = {
        $group : {
            _id : "$values._id",
            count : {
                $max : "$values.count"
            }
        }
};

db.product.aggregate([ proj1, proj2, group1, group2, project3, project4,
        unwind1, group3, {
            $sort : {
                _id : 1
            }
        } ]);

Tôi muốn điền vào phần còn thiếu ở cuối đơn đăng ký một cái gì đó như thế này để bạn tham khảo:

function sortResult(x, y) {
    var t1 = x._id.getTime();
    var t2 = y._id.getTime();
    if (t1 < t2) {
        return -1;
    } else if (t1 == t2) {
        return 0;
    } else {
        return 1;
    }
}

var result = db.product.aggregate();

var endDateMilliseconds = result[result.length - 1]._id.getTime();
var step = 24 * 60 * 60 * 1000; // milliseconds of one day

var map = {};
for (var i in result) {
    map[ result[i]._id.getTime() ] = result[i];
}

for (var ms = endDateMilliseconds, x = 1; x < 30; x++) {
    ms -= step;
    if ( ! ( ms in map ) ) {
        map[ms] = {_id : new Date(ms), count : 0};
    }
}

var finalResult = [];
for (var x in map) {
    finalResult.push(map[x]);
}
finalResult.sort(sortResult);
printjson(finalResult);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - Tạo Bộ sưu tập

  2. Làm cách nào để truy cập MongoDB của Meteor từ một ứng dụng khách khác, trong khi Meteor đang chạy?

  3. Mongocli có hỗ trợ URL công thức cho chip Apple M1 không?

  4. Cơ sở dữ liệu NoSQL phổ biến nhất được hỗ trợ bởi ClusterControl

  5. Mongoimport của tệp JSON