programing

mongodb ID에서 타임스탬프를 가져오는 중

elseif 2023. 3. 5. 09:34

mongodb ID에서 타임스탬프를 가져오는 중

MongoDB ID에서 타임스탬프를 얻으려면 어떻게 해야 하나요?

타임스탬프는 mongoDB ID의 첫 번째 4바이트에 포함되어 있습니다(http://www.mongodb.org/display/DOCS/Object+IDs) 참조).

타임스탬프는 다음과 같습니다.

timestamp = _id.toString().substring(0,8)

그리고.

date = new Date( parseInt( timestamp, 16 ) * 1000 )

Mongo 2.2에서는 이 기능이 변경되었습니다(http://docs.mongodb.org/manual/core/object-id/) 참조).

mongo 쉘 내부에서는 이 모든 작업을 한 번에 수행할 수 있습니다.

document._id.getTimestamp();

날짜 개체가 반환됩니다.

mongoDB 수집 항목에서 다음 절차를 통해 타임스탬프를 가져옵니다.

타임스탬프는 mongodb 객체의 내부 깊숙이 묻힙니다.

mongodb 쉘 로그인

ubuntu@ip-10-0-1-223:~$ mongo 10.0.1.223
MongoDB shell version: 2.4.9
connecting to: 10.0.1.223/test

항목을 삽입하여 데이터베이스 생성

> db.penguins.insert({"penguin": "skipper"})
> db.penguins.insert({"penguin": "kowalski"})
> 

있는지 확인합니다.

> show dbs
local      0.078125GB
penguins   0.203125GB

이 데이터베이스를 현재 데이터베이스로 만듭니다.

> use penguins
switched to db penguins

ISODate를 구입합니다.

> ISODate("2013-03-01")
ISODate("2013-03-01T00:00:00Z")

json을 인쇄합니다.

> printjson({"foo":"bar"})
{ "foo" : "bar" }

행을 되돌립니다.

> db.penguins.find()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498da28f83a61f58ef6c6d6"), "penguin" : "kowalski" }

한 줄만 검사하려고 합니다.

> db.penguins.findOne()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }

해당 행의 _id를 가져옵니다.

> db.penguins.findOne()._id
ObjectId("5498da1bf83a61f58ef6c6d5")

_id 개체에서 타임스탬프를 가져옵니다.

> db.penguins.findOne()._id.getTimestamp()
ISODate("2014-12-23T02:57:31Z")

마지막으로 추가한 레코드의 타임스탬프를 가져옵니다.

> db.penguins.find().sort({_id:-1}).limit(1).forEach(function (doc){ print(doc._id.getTimestamp()) })
Tue Dec 23 2014 03:04:53 GMT+0000 (UTC)

루프 예, 문자열 인쇄:

> db.penguins.find().forEach(function (doc){ print("hi") })
hi
hi

루프 예는 find()와 마찬가지로 행을 인쇄합니다.

> db.penguins.find().forEach(function (doc){ printjson(doc) })
{ "_id" : ObjectId("5498dbc9f83a61f58ef6c6d7"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498dbd5f83a61f58ef6c6d8"), "penguin" : "kowalski" }

루프, 시스템 날짜를 가져옵니다.

> db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = new Date(); printjson(doc); })
{
        "_id" : ObjectId("5498dbc9f83a61f58ef6c6d7"),
        "penguin" : "skipper",
        "timestamp_field" : ISODate("2014-12-23T03:15:56.257Z")
}
{
        "_id" : ObjectId("5498dbd5f83a61f58ef6c6d8"),
        "penguin" : "kowalski",
        "timestamp_field" : ISODate("2014-12-23T03:15:56.258Z")
}

루프, 각 행의 날짜를 가져옵니다.

> db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = doc._id.getTimestamp(); printjson(doc); })
{
        "_id" : ObjectId("5498dbc9f83a61f58ef6c6d7"),
        "penguin" : "skipper",
        "timestamp_field" : ISODate("2014-12-23T03:04:41Z")
}
{
        "_id" : ObjectId("5498dbd5f83a61f58ef6c6d8"),
        "penguin" : "kowalski",
        "timestamp_field" : ISODate("2014-12-23T03:04:53Z")
}

날짜만 필터링

> db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = doc._id.getTimestamp(); printjson(doc["timestamp_field"]); })
ISODate("2014-12-23T03:04:41Z")
ISODate("2014-12-23T03:04:53Z")

문자열에 대해서만 추가로 필터링:

> db.penguins.find().forEach(function (doc){ doc["timestamp_field"] = doc._id.getTimestamp(); print(doc["timestamp_field"]) })
Tue Dec 23 2014 03:04:41 GMT+0000 (UTC)
Tue Dec 23 2014 03:04:53 GMT+0000 (UTC)

최소 날짜 인쇄, 유형 가져오기, 날짜 할당:

> print(new Date())
Tue Dec 23 2014 03:30:49 GMT+0000 (UTC)
> typeof new Date()
object
> new Date("11/21/2012");
ISODate("2012-11-21T00:00:00Z")

날짜 인스턴스를 yyy-MM-dd로 변환합니다.

> print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate())
2014-1-1

각 행에 대해 yyy-MM-dd 형식으로 가져옵니다.

> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()) })
2014-12-23
2014-12-23

toLocaleDateString은 보다 간략합니다.

> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.toLocaleDateString()) })
Tuesday, December 23, 2014
Tuesday, December 23, 2014

각 행을 yyy-MM-dd HH:mm:ss 형식으로 가져옵니다.

> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds()) })
2014-12-23 3:4:41
2014-12-23 3:4:53

마지막으로 추가된 행의 날짜를 가져옵니다.

> db.penguins.find().sort({_id:-1}).limit(1).forEach(function (doc){ print(doc._id.getTimestamp()) })
Tue Dec 23 2014 03:04:53 GMT+0000 (UTC)

완료되면 데이터베이스를 삭제합니다.

> use penguins
switched to db penguins
> db.dropDatabase()
{ "dropped" : "penguins", "ok" : 1 }

사라졌는지 확인합니다.

> show dbs
local   0.078125GB
test    (empty)

이제 MongoDB는 웹스케일이 됩니다.

여기 여러분들을 위한 빠른 php 함수가 있습니다;)

public static function makeDate($mongoId) {

    $timestamp = intval(substr($mongoId, 0, 8), 16);

    $datum = (new DateTime())->setTimestamp($timestamp);

    return $datum->format('d/m/Y');
}

서버측에서 작성_idMongoDB ObjectId의

date = new Date( parseInt( _id.toString().substring(0,8), 16 ) * 1000 )

클라이언트 측에서의 사용

var dateFromObjectId = function (objectId) {
return new Date(parseInt(objectId.substring(0, 8), 16) * 1000);
};

사용하다$convert다음과 같은 방법:

db.Items.find({}, { creationTime: {"$convert":{"input":"$_id", "to":"date"}}});

몽고에서 타임스탬프를 얻으려면GoLang의 ID:

package main

import (
    "fmt"
    "github.com/pkg/errors"
    "strconv"
)

const (
    mongoIDLength = 24
)

var ErrInvalidMongoID = errors.New("invalid mongoID provided")

func main() {
    s, err := ExtractTimestampFromMongoID("5eea13924a04cb4b58fe31e3")
    if err != nil {
        fmt.Print(err)
        return
    }

    fmt.Printf("%T, %v\n", s, s)

    // convert to usual int
    usualInt := int(s)

    fmt.Printf("%T, %v\n", usualInt, usualInt)
}

func ExtractTimestampFromMongoID(mongoID string) (int64, error) {
    if len(mongoID) != mongoIDLength {
        return 0, errors.WithStack(ErrInvalidMongoID)
    }

    s, err := strconv.ParseInt(mongoID[0:8], 16, 0)
    if err != nil {
        return 0, err
    }

    return s, nil
}

Playground : https://play.golang.org/p/lB9xSCmsP8I

공식 문서:

ObjectId('mongodbIdGoesHere').getTimestamp();

mongoDB에서 검색

db.books.find({}).limit(10).map(function (v) {
 let data = v
 data.my_date = v._id.getTimestamp()
 return data
})

언급URL : https://stackoverflow.com/questions/6452021/getting-timestamp-from-mongodb-id