【问题标题】:Mongo Distinct Query with full row object具有完整行对象的 Mongo Distinct Query
【发布时间】:2016-03-08 20:14:20
【问题描述】:

首先,我是 mongo 的新手,所以我不太了解,由于某些依赖关系,我不能只删除重复的行。

我在 mongo 中存储了以下数据

{'id': 1, 'key': 'qscderftgbvqscderftgbvqscderftgbvqscderftgbvqscderftgbv', 'name': 'some name', 'country': 'US'},
{'id': 2, 'key': 'qscderftgbvqscderftgbvqscderftgbvqscderftgbvqscderftgbv', 'name': 'some name', 'country': 'US'},
{'id': 3, 'key': 'pehnvosjijipehnvosjijipehnvosjijipehnvosjijipehnvosjiji', 'name': 'some name', 'country': 'IN'},
{'id': 4, 'key': 'pfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnew', 'name': 'some name', 'country': 'IN'},
{'id': 5, 'key': 'pfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnew', 'name': 'some name', 'country': 'IN'}

你可以看到一些行是重复的,具有不同的 id 只要需要从输入中解决这个问题,我就必须在输出中解决它。

我需要以下方式的数据:

{'id': 1, 'key': 'qscderftgbvqscderftgbvqscderftgbvqscderftgbvqscderftgbv', 'name': 'some name', 'country': 'US'},
{'id': 3, 'key': 'pehnvosjijipehnvosjijipehnvosjijipehnvosjijipehnvosjiji', 'name': 'some name', 'country': 'IN'},
{'id': 4, 'key': 'pfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnewpfvvjwovnew', 'name': 'some name', 'country': 'IN'}

我的查询

keys = db.collection.distinct('key', {})
all_data = db.collection.find({'key': {$in: keys}})

如您所见,同一结果集需要两次查询请合并为一个,因为数据库非常大

我还可以在key 上创建一个unique key,但该值太长(152 个字符),对我没有帮助。

还是会??

【问题讨论】:

  • 也许不是“完全”在“删除”部分,但肯定是在识别部分。基本上你需要在公共字段上$group,然后返回任何其他辅助字段$first

标签: python mongodb pymongo


【解决方案1】:

您需要为此使用聚合框架。有多种方法可以做到这一点,下面的解决方案使用$$ROOT 变量来获取每个组的第一个文档:

db.data.aggregate([{
  "$sort": {
    "_id": 1
  }
}, {
  "$group": {
    "_id": "$key",
    "first": {
      "$first": "$$ROOT"
    }
  }
}, {
  "$project": {
    "_id": 0,
    "id":"$first.id",
    "key":"$first.key",
    "name":"$first.name",
    "country":"$first.country"
  }
}])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 2012-09-07
    • 2019-03-22
    相关资源
    最近更新 更多