Python 如何按日期删除Mongodb上的重复值
我有两个要合并的集合。合并后,我需要删除重复的值,保留最新文档并删除旧文档 我已尝试通过聚合方法来实现这一点:Python 如何按日期删除Mongodb上的重复值,python,mongodb,pymongo,Python,Mongodb,Pymongo,我有两个要合并的集合。合并后,我需要删除重复的值,保留最新文档并删除旧文档 我已尝试通过聚合方法来实现这一点: self.collection.aggregate([ { '$lookup': { 'from': 'algoritmo_result', 'localField': 'slug', 'foreignField': 'slug', 'as': 'copies_res
self.collection.aggregate([
{
'$lookup': {
'from': 'algoritmo_result',
'localField': 'slug',
'foreignField': 'slug',
'as': 'copies_result'
}
},
{
'$group': {
'_id': '$swab', 'count': {'$sum': 1}
}
},
{
'$match': {
'obs': {'$not': ignore_string},
'count': 1
},
}
])
问题是我正在删除所有重复的值,而不仅仅是旧值。我找到的解决方案是制作一个过滤器,在当前集合中搜索最后一个重复的文档,并比较两个对象的slug(唯一字段,也可以是_id) 看起来是这样的:
def last_duplicated_patient(self, swab):
return self.collection.find({'swab': swab}).sort([("_id", pymongo.DESCENDING)]).limit(1)
def aggregate_result_collection(self):
ignore_string = re.compile('coleta', re.IGNORECASE)
patients_with_results = list(self.collection.aggregate([
{
'$lookup': {
'from': 'algoritmo_result',
'localField': 'slug',
'foreignField': 'slug',
'as': 'copies_result'
}
},
{
'$match': {
'obs': {'$not': ignore_string},
},
},
]))
patients_with_results = list(filter(
lambda x: x.get('slug') == list(self.last_duplicated_patient(x.get('swab')))[0].get('slug'),
patients_with_results
))