mongodb

【mongoDB】MongoDB 根据NumberLong()

2024-08-08  本文已影响0人  Bogon

解读一下 MongoDB 这条数据

> use testDB

> db.T_Test.find({"groupId": "6194c0892d0ec58d421c02a2"})

{ "_id" : ObjectId("6194c0893617f8045b953f6a"), "groupId" : "6194c0892d0ec58d421c02a2", "msgId" : "6194c0892d0ec58d421c02a3", "score" : NumberLong("1637138569166") }

这条 MongoDB 数据记录包含了一个消息的相关信息。
让我们逐项解析每个字段的含义:

  1. _id: ObjectId("6194c0893617f8045b953f6a")

    • 这是 MongoDB 自动生成的唯一标识符。每条记录都有一个 _id 字段,用于唯一标识这条记录。
  2. groupId: "6194c0892d0ec58d421c02a2"

    • 这是一个表示群组的唯一标识符。这里的 groupId 显示这是属于某个特定群组的消息。
  3. msgId: "6194c0892d0ec58d421c02a3"

    • 这是消息的唯一标识符,表示每条消息的唯一性。
  4. score: NumberLong("1637138569166")

    • 这是一个时间戳或分数。由于它的数值较大,可能是时间戳(以毫秒为单位),表示消息的创建时间或相关时间点。这个数值可以转换成更易读的日期时间格式。

总结起来,这条数据记录了一个特定群组中一条消息的唯一标识符、消息标识符以及一个与时间或分数相关的长整型数值。如果需要具体时间,可以将 score 字段的数值转换为标准的日期时间格式。

MongoDB中的NumberLong是一个64位的整数类型,用于存储大于Number.MAX_SAFE_INTEGER(即2^53 - 1)的整数值。这个类型通常用于时间戳,因为时间通常是以毫秒为单位,而JavaScript中的Number类型只能安全地处理Number.MAX_SAFE_INTEGER毫秒(即约为1.7亿年)内的数值。

当你在MongoDB shell中看到NumberLong类型的数据时,可以直接将其视为一个普通的JavaScript数字,因为MongoDB shell会自动将NumberLong转换为JavaScript中的number类型。

如果你在JavaScript代码中需要使用NumberLong,你可以在插入数据时显式地指定数据类型,例如:

db.collection.insertOne({
score: NumberLong("1637138569166")
});

或者,在查询时,MongoDB会自动将NumberLong转换为JavaScript中的number类型,你可以像处理普通JavaScript数字一样处理它。例如:

db.collection.find({
score: { $gt: 1637138569166 }
});

在上面的查询中,即使score字段在MongoDB中是以NumberLong形式存储的,你仍然可以使用普通的JavaScript数字进行比较。

如何从这张表根据 "groupId": "6194c0892d0ec58d421c02a2" 和 "score" 大于 2024-07-07 小于2024-08-07 ?

要从 MongoDB 中查询特定 groupId 并且 score 字段的值在两个日期之间的记录,首先需要将日期转换为时间戳(以毫秒为单位)。

工具 › 开发类 › 时间戳转换
https://tool.lu/timestamp/

image.png

将转换后的时间戳值插入到 MongoDB 查询中,以 NumberLong 类型存储的,那么查询语句如下:

db.T_Test.find({
  "groupId": "6194c0892d0ec58d421c02a2",
  "score": {
    $gt: NumberLong("xxxxxx"), // 2024-07-07 的时间戳
    $lt: NumberLong("xxxxxx")  // 2024-08-07 的时间戳
  }
});
> use testDB
> db.T_Test.count({   "groupId": "6194c0892d0ec58d421c02a2",    "score": {  $gt: NumberLong("1720281600000"),   $lt: NumberLong("1722960000000")}   });
6
> db.T_Test.find({  "groupId": "6194c0892d0ec58d421c02a2",    "score": {     $gt: NumberLong("1720281600000"),      $lt: NumberLong("1722960000000")     } });
{ "_id" : ObjectId("66a73507f7f00024c15f8fa5"), "groupId" : "6194c0892d0ec58d421c02a2", "msgId" : "66a735072d0ecf8ec0bb3d21", "score" : NumberLong("1722234119126") }
{ "_id" : ObjectId("66a734f0f7f00024c15f8fa2"), "groupId" : "6194c0892d0ec58d421c02a2", "msgId" : "66a734f02d0ecf8ec0bb3ca5", "score" : NumberLong("1722234096837") }
{ "_id" : ObjectId("66a72fe49b6a9e46f54c5dc9"), "groupId" : "6194c0892d0ec58d421c02a2", "msgId" : "66a72fe42d0e0e69ac715d6b", "score" : NumberLong("1722232804728") }
{ "_id" : ObjectId("66a72f9bf7f00024c15f8f27"), "groupId" : "6194c0892d0ec58d421c02a2", "msgId" : "66a72f9b2d0ecf8ec0bb2487", "score" : NumberLong("1722232731897") }
{ "_id" : ObjectId("66a72e35f7f00024c15f8f19"), "groupId" : "6194c0892d0ec58d421c02a2", "msgId" : "66a72e352d0ecf8ec0bb2093", "score" : NumberLong("1722232373316") }
{ "_id" : ObjectId("669a0b0ef7f00024c15f60f9"), "groupId" : "6194c0892d0ec58d421c02a2", "msgId" : "669a0b0e2d0ecf8ec0adbe76", "score" : NumberLong("1721371406025") }

解释

这样可以有效地筛选出在指定日期范围内的记录。

参考

mongoDB中的NumberLong()数据类型
https://www.jianshu.com/p/6519424ff86e

上一篇下一篇

猜你喜欢

热点阅读