【问题标题】:How to sort within my aggregated group of duplicates by date如何按日期在我的聚合重复组中排序
【发布时间】:2021-09-06 14:13:13
【问题描述】:

这是我的数据的样子:

    {"_id":{"$oid":"61361d140e9b57aded3f164f"},"FeatureName":"AI Box Kreis (14)","radius":29.85,"x_TCP":-52.7541694301,"y_TCP":-98.7192782699,"z_TCP":-1.4229479066,"w_TCP":179.9808127426,"p_TCP":-0.0080311453,"r_TCP":0.1707167947,"exp1":5,"ExtractionState":"NoGoodContrast","ExtractionQuality":0,"avgBright":21.9513334771,"stdBright":3.3364276129,"RobotPoseName":"Position_1","J1":-8.5,"J2":49.32,"J3":-86.37,"J4":10.74,"J5":-7.33,"J6":170,"J7":0,"EvaluationFilename":"FeatureData_Position_1_Messung 2.fml","MeasurementFilename":"ascii_Position_1_Messung 5.txt","SceneFilename":"Messung 2_sc.png","point_file":"D:\\LRZSync\\Messungen\\Kreis_14_x_-50_y_-100_100_10/3D-Measurements\\Position_1_Messung 2.txt","points":1443,"points_ply":null,"version":"master","user":"niclas","Messreihe":"test","date":{"$date":"2021-09-06T13:52:20.000Z"}}

当我更新我的数据时,我会检查是否有任何重复的代码:

    issue = collection.aggregate([{'$sort': {'date': 1}},
                              {'$group': {'_id': {'FeatureName': '$FeatureName', 'ExposureTime': '$exp1',
                                                  'Joint1': '$J1', 'Joint2': '$J2', 'Joint3': '$J3',
                                                  'Joint4': '$J4',
                                                  'Joint5': '$J5', 'Joint6': '$J6', 'Joint7': '$J7'},
                                          'unique_ids': {'$addToSet': '$_id'},
                                          'count': {'$sum': 1}}},
                              {'$match': {'count': {'$gt': 1}}}])
        for matches in issue:
            del matches['unique_ids'][0]
            for i in matches['unique_ids']:
                remove.append(i)

'$sort' 应该按日期对组内的重复项进行排序,因此我的 unique_ids 列表具有按日期对每个重复项进行排序的 ObjectId。首先是“最旧”的 ObjectId,最后一个是“最新的”。 实际结果是 ObjectId 未排序,因此第一个可能是最旧的,但不一定是。

是否可以按日期在组内排序,如果可以,有人可以帮我解决这个问题吗?

这是我的输出:

    {'_id': {'FeatureName': 'AI Box Kreis (14)', 'ExposureTime': 5, 'Joint1': -8.28, 'Joint2': 37.65, 'Joint3': -77.14, 'Joint4': 4.76, 'Joint5': -16.49, 'Joint6': 175.87, 'Joint7': 0}, 'unique_ids': [ObjectId('6137239fc1397e6a8fb3a965'), ObjectId('61372390f3ba8e37db3f98a9'), ObjectId('613723ac0c8e9387544bf28e')], 'count': 3}

unique_ids 中的 ObjectIds 应该按日期排序,但它们不是。

【问题讨论】:

    标签: mongodb aggregation-framework pymongo


    【解决方案1】:
    issue = collection.aggregate([
        {
            $group: {
                _id: {
                    FeatureName: "$FeatureName",
                    ExposureTime: "$exp1",
                    Joint1: "$J1",
                    Joint2: "$J2",
                    Joint3: "$J3",
                    Joint4: "$J4",
                    Joint5: "$J5",
                    Joint6: "$J6",
                    Joint7: "$J7",
                },
                unique_ids: { $addToSet: "$_id" },
                count: { $sum: 1 },
            },
        },
        { $match: { count: { $gt: 1 } } },
        { $sort: { date: -1 } },
    ]);
    

    您的$sort 应该在最后。在您的代码中,您首先对其进行排序,然后对其进行分组。但它总是像你得到你想要的输出然后相应地对它进行排序。

    【讨论】:

    • 感谢您的快速响应,但问题仍然存在。我的 unique_ids 数组中的 ObjectId 仍未排序。
    • 所以也对它们进行排序。 _id : 1。 unique_ids 的 id
    猜你喜欢
    • 2018-04-25
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2014-09-08
    • 2021-02-05
    • 2021-01-06
    • 2017-05-21
    • 2013-03-11
    相关资源
    最近更新 更多