解读一下 MongoDB 这条数据
> use testDB
> db.T_Test.find({"groupId": "6194c0892d0ec58d421c02a2"})
{ "_id" : ObjectId("6194c0893617f8045b953f6a"), "groupId" : "6194c0892d0ec58d421c02a2", "msgId" : "6194c0892d0ec58d421c02a3", "score" : NumberLong("1637138569166") }
这条 MongoDB 数据记录包含了一个消息的相关信息。
让我们逐项解析每个字段的含义:
-
_id
:ObjectId("6194c0893617f8045b953f6a")
- 这是 MongoDB 自动生成的唯一标识符。每条记录都有一个
_id
字段,用于唯一标识这条记录。
- 这是 MongoDB 自动生成的唯一标识符。每条记录都有一个
-
groupId
:"6194c0892d0ec58d421c02a2"
- 这是一个表示群组的唯一标识符。这里的
groupId
显示这是属于某个特定群组的消息。
- 这是一个表示群组的唯一标识符。这里的
-
msgId
:"6194c0892d0ec58d421c02a3"
- 这是消息的唯一标识符,表示每条消息的唯一性。
-
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/
将转换后的时间戳值插入到 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") }
解释
-
$gt
: 大于(greater than),用来找出score
大于 2024-07-07 的时间戳。 -
$lt
: 小于(less than),用来找出score
小于 2024-08-07 的时间戳。
这样可以有效地筛选出在指定日期范围内的记录。
参考
mongoDB中的NumberLong()数据类型
https://www.jianshu.com/p/6519424ff86e
网友评论