美文网首页mongodb
【mongoDB】mongoDB中的NumberLong()数据

【mongoDB】mongoDB中的NumberLong()数据

作者: Bogon | 来源:发表于2023-04-21 00:14 被阅读0次
    > use  testDB
    
    > db.testColl.findOne()
    {
            "_id" : ObjectId("63ec79364610bf82b99d23a5"),
            "pid" : "XT-db238f62-cc77-40bb-8952-9c96544dc786",
            "group" : "全部订阅用户",
            "groupUserId" : "63c0ba6de4b095b2050d9f0a",
            "type" : 1,
            "eid" : "123456",
            "createTime" : NumberLong("1676441910831"),
            "updateTime" : NumberLong("1676441910831")
    }
    

    MongoDB中NumberLong()

    MongoDB中的NumberLong()是一种数据类型,它表示一个64位有符号整数。
    在MongoDB中,NumberLong()用于存储大于2^31-1(即2,147,483,647)的整数值,因为MongoDB默认使用32位整数来存储数字,无法存储大于该值的数字。

    NumberLong()可以在MongoDB shell中使用,可以通过以下方式创建:

    NumberLong("1234567890123456789")

    在MongoDB中,NumberLong()的用途非常广泛,例如在聚合操作中,可以对大数字进行计算。
    例如,如果要计算一个集合中所有文档的某个字段的总和,而该字段的值可能超过2^31-1,则可以使用NumberLong()来确保计算正确。

    另外,在MongoDB的驱动程序中,也可以使用NumberLong()来处理大数字。
    例如,在Java中,可以使用BSONObject类的put()方法将一个NumberLong对象插入到MongoDB数据库中。

    总之,NumberLong()是MongoDB中一种重要的数据类型,用于处理大数字,确保数据的准确性和完整性。

    "createTime" : NumberLong("1676441910831")

    这个示例中,"createTime"字段的值是一个64位有符号整数,它的值是1676441910831。由于这个数字超过了2^31-1,因此不能使用32位整数来存储它。
    为了确保数据的正确性和完整性,MongoDB使用NumberLong()函数将其转换为一个64位整数,并将其存储在数据库中。

    在MongoDB shell中,可以使用以下命令来查询和处理这个字段的值:

    db.collection.find({"createTime": NumberLong("1676441910831")})

    这将返回具有指定"createTime"值的所有文档。
    注意,这种数据类型必须要在NumberLong对象里面加上双引号,才能执行正常查询动作!!!

    另外,在聚合操作中,可以使用$toLong聚合操作符将一个32位整数转换为64位整数。例如:

    db.collection.aggregate([
      {
        $group: {
          _id: null,
          total: { $sum: { $toLong: "$createTime" } }
        }
      }
    ])
    

    这将计算集合中所有文档的"createTime"字段的总和,并将结果作为64位整数返回。

    时间戳
    Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。

    时间戳转换
    https://tool.lu/timestamp

    "createTime" : NumberLong("1676441910831")
    "updateTime" : NumberLong("1676441910831")

    image.png

    在示例中,"createTime"字段的值是1676441910831,它是一个时间戳,表示从1970年1月1日至2023-02-15 14:18:30 的毫秒数。这种表示方式可以使时间戳在MongoDB中进行存储和处理时具有更高的精度和准确性。

    在MongoDB shell中,可以使用以下命令将时间戳转换为日期:

    new Date(NumberLong("1676441910831"))

    > new Date(NumberLong("1676441910831"))
    ISODate("2023-02-15T06:18:30.831Z")
    

    这将返回一个JavaScript日期对象,表示时间戳对应的日期和时间。

    ISODate("2023-02-15T06:18:30.831Z") 表示的是UTC时间,加8就是 2023-02-15 14:18:30 了。

    参考

    时间戳转换工具
    https://tool.lu/timestamp

    MongoDB中NumberLong(x)和 NumberLong("x")之间的区别
    https://www.nhooo.com/note/qa0g34.html

    相关文章

      网友评论

        本文标题:【mongoDB】mongoDB中的NumberLong()数据

        本文链接:https://www.haomeiwen.com/subject/ueldjdtx.html