python - 具有完整行对象的 Mongo Distinct Query

首先我是 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 个字符),对我没有帮助。

还是会??

最佳答案

您需要为此使用聚合框架。有多种方法可以做到这一点,下面的解决方案使用 $$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"
  }
}])

https://stackoverflow.com/questions/35877145/

相关文章:

mongodb - 如何在 MongoDB 中获取(或聚合)数组的不同键

javascript - Passport 没有保持持久的登录 session

java - 使用 Spring Data 按提取的日期、月份和年份聚合项目组

java - MongoDb BSON 以 UTC 时间存储日期

linux - PHP升级到7后,为什么不能使用mongodb驱动?

mongodb - 查询以匹配包含点的多边形

angularjs - angularjs可以直接连接mongodb吗?

node.js - 关于 Mongoose 填充关系一个字符串字段

mongodb - Mongo在计算条件下排序

mongodb - Docker-MongoDB 中的身份验证问题