我有一个mongo集合,其文档组织如下:
{
"_id" : ObjectId("5ea084718a475ee5faaaf3b7"),
"vehicleid" : 32040,
"date" : ISODate("2018-02-01T00:00:00Z"),
"points" : {
"direction" : 135,
"latitude" : -3.744851,
"longitude" : -38.545571,
"odometer" : 55697826,
"routecode" : 0,
"speed" : 3,
"deviceid" : 134680,
"metrictimestamp" : ISODate("2018-02-01T02:59:59Z")
}
}
{
"_id" : ObjectId("5ea084718a475ee5faaaf3b8"),
"vehicleid" : 32040,
"date" : ISODate("2018-02-01T00:00:00Z"),
"points" : {
"direction" : 270,
"latitude" : -3.840556,
"longitude" : -38.4954,
"odometer" : 24358799,
"routecode" : 0,
"speed" : 0,
"deviceid" : 97878,
"metrictimestamp" : ISODate("2018-02-01T02:59:19Z")
}
}
我需要一种通过创建新的“点”字段来更新集合的方法,该字段将是具有相同“车辆标识”和“日期”的所有文档中所有“点”对象的数组,例如:
{
"_id" : ObjectId("5ea084718a475ee5faaaf3b8"),
"vehicleid" : 32040,
"date" : ISODate("2018-02-01T00:00:00Z"),
"points" : [{
"direction" : 270,
"latitude" : -3.840556,
"longitude" : -38.4954,
"odometer" : 24358799,
"routecode" : 0,
"speed" : 0,
"deviceid" : 97878,
"metrictimestamp" : ISODate("2018-02-01T02:59:19Z")
},
{
"direction" : 135,
"latitude" : -3.744851,
"longitude" : -38.545571,
"odometer" : 55697826,
"routecode" : 0,
"speed" : 3,
"deviceid" : 134680,
"metrictimestamp" : ISODate("2018-02-01T02:59:59Z")
}]
}
有任何想法吗???
是的,您可以$out
在MongoDB中使用
这是相同的shell查询:
如果要更新同一集合,我将第二个集合的名称保持不同,可以将集合的名称保持不变。
NOTE $out
将用集合的输出替换集合中已经存在的所有文档,直到最后一个阶段。因此,您最好谨慎处理。
db.first_collection.aggregate([
{
$project:{
"_id":0
}
},
{
$group:{
"_id":{
"vehicleid":"$vehicleid",
"date":"$date"
},
"date":{
$first:"$date"
},
"vehicleid":{
$first:"$vehicleid"
},
"points":{
$push:"$points"
}
}
},
{
$project:{
"_id":0
}
},
{
$out:"second_collection"
}
])
有关更多信息,$out
请在这里阅读。
希望这会有所帮助:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句