表名是这样的t_equipment
数据结构是这样的
{
"_id" : "9000068268_201703",
"data" : [
[
9000068268.0,
0.0,
231.1,
0.4,
232.2,
0.0,
233.3,
4954.4,
3614.8,
4768.8,
0.0,
0.0,
0.0,
13338.4,
0.0,
1490338662906.0
],
[
9000068268.0,
0.0,
231.1,
0.4,
232.2,
0.0,
233.3,
4954.4,
3614.8,
4768.8,
0.0,
0.0,
0.0,
13338.4,
0.0,
1500338662908.0
],
[
9000068268.0,
0.0,
231.1,
0.4,
232.2,
0.0,
233.3,
4954.4,
3614.8,
4768.8,
0.0,
0.0,
0.0,
13338.4,
0.0,
1800338662908.0
]
}
我现在查询表中_id为9000068268_201703,data数据中数组下表为[15]的,时间戳最接近1600338662908.0的前面一条数据:
[
9000068268.0,
0.0,
231.1,
0.4,
232.2,
0.0,
233.3,
4954.4,
3614.8,
4768.8,
0.0,
0.0,
0.0,
13338.4,
0.0,
1500338662908.0
]
不知道如何写这个方法,希望有人指导下,可以用原生的写法或用spring-mongodb的写法都可以,但是不能做遍历的动作,效率太低了
使用:如下查找法没查出条数:db.getCollection('t_equipment').find({ "data": { $elemMatch: { "[15]": 1490338662906.0} } }) ,我需要返回二维数组中指定索引的一维数组的所有值,而不是整个集合对象
参考这个
https://www.cnblogs.com/jiandankuaile/p/7942016.html
不知道你的data为啥没有字段名;大概是这样查
{ "data": { $elemMatch: { "字段名": {'$gte' : 时间戳, '$lte' : 时间戳}} } }
https://blog.csdn.net/jiandequn/article/details/86525618
目前不支持二维数组的写法,现在上一段数组中包BSON的格式:
db.t_test.aggregate({$match:{'_id':{ $in: ['90000006_201704','90000005_201703'] } }}, {$project: {msg: {$filter: {input: "$data", as: "data", cond: {$eq: ["$$data.timestap", 1589735039002.0]}}}}})