gpt4 book ai didi

mongodb - 查询有n条记录的集合

转载 作者:行者123 更新时间:2023-12-02 09:37:56 25 4
gpt4 key购买 nike

  • 我有一个名为 GPS 的集合,每秒有 n 个与服务器连接的设备将数据推送到集合。样本数据
 {
"_id" : ObjectId("5dd2d4f7d092fb70c022c700"),
"date" : "2019-11-18",
"altitude" : "0.0",
"latdegree" : "N",
"gpspositioning" : "V",
"positionType" : "GPS",
"latitude" : "12.900660",
"range" : null,
"gsmsignalstrength" : "46",
"battery" : "87",
"terminalstatus" : "00000000",
"longitude" : "80.2347400",
"satellites" : "0",
"created" : "2019-11-18 17:29:26.991Z",
"longdegree" : "E",
"tumblingtimes" : "0",
"positionaccuracy" : "52",
"time" : "17:30:01.000Z",
"locationDate" : "2019-11-18 17:30:01.000Z",
"device" : "6005868660"
}

所以现在我想用每个设备的最后更新值查询这个集合,即设备的数量作为数组。例如

[
{
device:1,
lat:11,
long:4111
},
{
device:2,
lat:11,
long:4111
},
{
device:3,
lat:11,
long:4111
}
.....n]

我尝试过使用 find 和 $natural 它查找整个数据而不是最后更新的数据。请问我该怎么做?谢谢

最佳答案

我猜你需要aggregation ,尝试类似的事情。我在这里所做的是首先使用 locationDate 按升序对数据进行排序( $sort :1)(我猜它是设备的最后一个位置时间戳),然后在现场应用分组device 然后选择管道中的最后一个数据。您还可以执行 $sort:-1 (降序排序并选择 $first)

$last 是什么意思?做什么?

Returns the value that results from applying an expression to the last document in a group of documents that share the same group by a field. Only meaningful when documents are in a defined order.

 db.gps.aggregate(
[
{ $sort: { locationDate: -1 } },
{
$group:
{
_id: "$device",
latitude:{$first: "$latitude"},
longitude: {$first: "$longitude"},
lastupdateValue: { $first: "$locationDate" }
}
}
]
)

或者

     db.gps.aggregate(
[
{ $sort: { locationDate: 1 } },
{
$group:
{
_id: "$device",
latitude:{$last: "$latitude"},
longitude: {$last: "$longitude"},
lastupdateValue: { $last: "$locationDate" }
}
}
]
)

关于mongodb - 查询有n条记录的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58930752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com