【问题标题】:How to find duplicate values in mongodb using distinct query?如何使用不同的查询在 mongodb 中查找重复值?
【发布时间】:2017-03-30 06:56:17
【问题描述】:

我正在处理 Mongodb 不同的查询,我有一个重复输入的集合,我正在按照 created_at 进行操作。但我想获取没有重复的值。

示例 JSON

{
  "posts": [{
      "id": "580a2eb915a0161010c2a562",
      "name": "\"Ah Me Joy\" Porter",
      "created_at": "15-10-2016"
    }, {
      "id": "580a2eb915a0161010c2a562",
      "name": "\"Ah Me Joy\" Porter",
      "created_at": "25-10-2016"
    }, {
      "id": "580a2eb915a0161010c2a562",
      "name": "\"Ah Me Joy\" Porter",
      "created_at": "01-10-2016"
    }, {
      "id": "580a2eb915a0161010c2bf572",
      "name": "Hello All",
      "created_at": "05-10-2016"
   }]
}

MongoDB查询

db.getCollection('posts').find({"id" : ObjectId("580a2eb915a0161010c2a562")})

所以我想知道mongodb的不同查询,请仔细阅读我的帖子并告诉我。

【问题讨论】:

  • 发现不同是什么意思?
  • @hyades 所以当我执行 db.collection.find 时它不会获取重复的值,它会忽略重复的值并只显示唯一的结果......
  • 您的收藏有多个id 条目。如果你只想要一个,你可以试试findOne,它会随机选择一个
  • @hyades 不,我想这样做 db.posts.find({}),我想消除重复值并填充结果。
  • 以上述 JSON 示例为例,您能否通过edit 链接更新您的问题,并向我们展示您预期的 JSON 查询结果应该是什么?

标签: node.js mongodb distinct-values


【解决方案1】:

尝试如下:

db.getCollection('posts').distinct("id")

它将返回集合posts中的所有唯一ID,如下所示:

["580a2eb915a0161010c2a562", "580a2eb915a0161010c2bf572"]

来自 MongoDB 文档:

该示例使用包含以下文档的inventory 集合:

 { "_id": 1, "dept": "A", "item": { "sku": "111", "color": "red" }, "sizes": [ "S", "M" ] }
{ "_id": 2, "dept": "A", "item": { "sku": "111", "color": "blue" }, "sizes": [ "M", "L" ] }
{ "_id": 3, "dept": "B", "item": { "sku": "222", "color": "blue" }, "sizes": "S" }
{ "_id": 4, "dept": "A", "item": { "sku": "333", "color": "black" }, "sizes": [ "S" ] }

为字段返回不同的值 (dept):

db.inventory.distinct( "dept" )

该方法返回以下不同部门值的数组:

[ "A", "B" ]

参考:

  1. https://docs.mongodb.com/v3.2/reference/method/db.collection.distinct/

【讨论】:

    【解决方案2】:

    根据我的理解,您希望获得不同的结果,这应该消除该集合中重复的 id

    通过在 mongodb 中使用 distinct,它将返回不同值的列表

    db.getCollection('posts').distinct("id"); 
    ["580a2eb915a0161010c2a562", "580a2eb915a0161010c2bf572"]
    

    所以你应该研究一下 mongodb 聚合

    db.posts.aggregate(
    { "$group" : { "_id" : "$id", "name" : {"$first" : "$name"}, "created_at" : {"$first" : "$created_at"} }}
    )
    

    输出将是消除重复的id 文档的结果列表

    【讨论】:

      猜你喜欢
      • 2019-04-05
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      相关资源
      最近更新 更多