【问题标题】:How to find and unset same sub field value on mongodb如何在 mongodb 上查找和取消设置相同的子字段值
【发布时间】:2023-03-27 19:50:01
【问题描述】:

我在 mongodb 中有 100 万个文档。我想查找和取消设置相同的字段。你能给我一个方法或一个想法吗?

我的文件是这样的:

{
        "regions" : [ 
            {"id" : "1", "name" : "World"}, 
            {"id" : "10370","name" : "South America"}, 
            {"id" : "1426","name" : "Suriname"}
        ]
    }
    {
        "regions" : [ 
            {"id" : "1", "name" : "World"}, 
            {"id" : "10370","name" : "South America"}, 
            {"id" : "1426","name" : "Suriname"}
        ]
    }
    {
        "regions" : [ 
            {"id" : "1","name" : "World"}, 
            {"id" : "1734","name" : "USA"}, 
            {"id" : "1136","name" : "Pennsylvania"}, 
            {"id" : "16962","name" : "Greater Philadelphia area"}, 
        ]
    }
    {
        "regions" : [ 
            {"id" : "1","name" : "World"}, 
            {"id" : "1734","name" : "USA"}, 
            {"id" : "1136","name" : "Pennsylvania"}, 
            {"id" : "16962","name" : "Greater Philadelphia area"}, 
        ]
    }
    {
    "regions" : [ 
        {"id" : "1","name" : "World"}, 
        {"id" : "34964","name" : "Oceania"}, 
        {"id" : "15","name" : "Australia"}, 
        {"id" : "470","name" : "Western Australia"}, 
        {"id" : "36282","name" : "Perth"}, 
      ]
   }

我该如何改变:

{
        "regions" : [ 
            {"id" : "1", "name" : "World"}, 
            {"id" : "10370","name" : "South America"}, 
            {"id" : "1426","name" : "Suriname"}
        ]
    }
    {
        "regions" : [ 
            {"id" : "1","name" : "World"}, 
            {"id" : "1734","name" : "USA"}, 
            {"id" : "1136","name" : "Pennsylvania"}, 
            {"id" : "16962","name" : "Greater Philadelphia area"}, 
        ]
    }
    {
"regions" : [ 
    {"id" : "1","name" : "World"}, 
    {"id" : "34964","name" : "Oceania"}, 
    {"id" : "15","name" : "Australia"}, 
    {"id" : "470","name" : "Western Australia"}, 
    {"id" : "36282","name" : "Perth"}, 
   ]
  }

提前感谢您的回答和关注。

更新: 我正在尝试这段代码:

db.collection.aggregate(
 {"$group":{"_id": {"id": "$regions.id","name": "$regions.name"},}},
 {"$group":{"_id":ObjectId(),"regions": { "$push": {"id": "$_id.id","name": $_id.name"}}}},
 {"$unwind": "$regions"},
 {"$out": "newcollection"}
)

它给出了这个错误: "errmsg" : "insert for $out failed: { connectionId: 111, err: \"E11000 duplicate key error collection: collection.tmp.agg_out.12 index: id dup key: { : ObjectId( '5767f378ff8f5e9302d95bc8') }\", 代码: 11000, n: 0, ok: 1.0 }",

我怎样才能给一个唯一的键?

【问题讨论】:

  • 不清楚你想在这里做什么。是否要从集合中删除重复项?
  • 是的,我想删除重复的字段。

标签: mongodb mongodb-query


【解决方案1】:

使用聚合,如果按数组元素分组,可以去掉重复区域。这样的事情应该有帮助吗?

db.regs.aggregate([{$group:{"_id":{id:"$regions.id",name:"$regions.name"}}}]).pretty()

【讨论】:

  • 是的,这很好,但是_id 下的所有字段。当我将_id 更改为regions 时出现错误。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2017-06-20
  • 1970-01-01
  • 2017-04-08
  • 2021-09-20
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
相关资源
最近更新 更多