【问题标题】:How to compare documents with each other in MongoDB?如何在 MongoDB 中相互比较文档?
【发布时间】:2021-10-22 04:36:38
【问题描述】:

我有包含 N 个文档的集合 A。 我的收藏看起来像这样:

{
            "_id": "61721b17e52d6033c444059d",
            "advertising_venue": "GAP Store, 1440 W Taylor st",
            "ad_shelf_name": "11",
            "gender": "man",
            "age": "25-35",
            "distance_to_shelf": "7.035805",
            "date": "October 21st 2021 8:59:51 pm",
            "user_id": "0.14136775694578052"
        },
        {
            "_id": "61721b18e52d6033c444059e",
            "advertising_venue": "GAP Store, 1440 W Taylor st",
            "ad_shelf_name": "11",
            "gender": "man",
            "age": "25-35",
            "distance_to_shelf": "8.065434999999999",
            "date": "October 21st 2021 8:59:52 pm",
            "user_id": "0.14136775694578052"
        },
        {
            "_id": "61721b19e52d6033c444059f",
            "advertising_venue": "GAP Store, 1440 W Taylor st",
            "ad_shelf_name": "11",
            "gender": "man",
            "age": "25-35",
            "distance_to_shelf": "10.124695",
            "date": "October 21st 2021 8:59:53 pm",
            "user_id": "0.14136775694578052"
        }

我想按 user_id 值比较每个文档,如果相似则删除其中一个文档,如果不相似则保留在集合中。

如果可以在 MongoDB 中做?

【问题讨论】:

标签: node.js mongodb


【解决方案1】:

可以通过在 user_id 上使用 dropDups:true 创建唯一索引来实现。

db.collection.ensureIndex({user_id: 1}, {unique: true, dropDups: 真的})

【讨论】:

    【解决方案2】:

    当你说

    如果相似

    这在谈论字符串时具有特殊的含义。如果您想删除所有具有相同 user_id 字段的文档,可以这样做。

    如果你想删除几乎相同但略有不同user_id的所有文档,那么不,不能直接用mongodb完成,你必须用另一种方式解决。

    假设您要删除具有相同 user_id 字段的文档,您可能需要考虑要保留哪个文档以及要删除哪个文档。

    假设您只想保留每个副本的第一个副本,您可以通过在 user_id 字段上创建唯一索引并将选项 dropDups 设置为 true 来实现。然后,MongoDB 将扫描磁盘上的集合并索引每个 user_id。当它遇到任何重复的文档时,它将删除它们。

    db.mycollection.ensureIndex({'user_id' : 1}, {unique : true, dropDups : true})
    

    但是,如果您想根据其他逻辑删除文档,比如说您想保留最新的文档,或者可能是具有最低 distance_to_shelf 的文档,您将需要首先查询您的数据,按排序使某些记录更有价值的标准,然后删除所有具有相同 user_id 字段但不具有相同 _id 的文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 2015-07-02
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多