首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从mongo DB集合中的对象数组中查询唯一文档

从mongo DB集合中的对象数组中查询唯一文档
EN

Stack Overflow用户
提问于 2022-11-10 06:40:27
回答 1查看 33关注 0票数 0

我需要一个查询从"A“集合中删除重复的文档。一旦重复被删除,那么我将创建一个"A“集合的索引。

"A“藏书有近132920份文件。

请查找"A“集合Mongo DB文档结构,

代码语言:javascript
复制
/*1 */
    {
        "_id" : ObjectId("5d654ed25616a9d461bc0aa7"),
        "aC" : "AB",
        "aI" : "ABCD",
        "aN" : "000000002001",
        "aT" : "CA",
        "bID" : NumberLong(0),
        "pD" : "2019-06-18",
        "transactions" : [ 
            {
                "seqNo" : 1,
                "tC" : "S"
            }, 
            {
                "seqNo" : 2,
                "tC" : "S"
            },
            {
                "seqNo" : 2,
                "tC" : "S"
            },
            {
                "seqNo" : 1,
                "tC" : "S"
            },
            {
                "seqNo" : 3,
                "tC" : "S"
            }
        ]
    }

/*2*/
{
        "_id" : ObjectId("5d654ed25616a9d461bc0aa8"),
        "aC" : "AB",
        "aI" : "ABCD",
        "aN" : "000000002002",
        "aT" : "CA",
        "bID" : NumberLong(0),
        "pD" : "2019-06-18",
        "transactions" : [ 
            {
                "seqNo" : 1,
                "tC" : "S"
            }, 
            {
                "seqNo" : 2,
                "tC" : "S"
            },
            {
                "seqNo" : 2,
                "tC" : "S"
            },
            {
                "seqNo" : 1,
                "tC" : "S"
            },
            {
                "seqNo" : 3,
                "tC" : "S"
            }
        ]
    }

预期产出:

代码语言:javascript
复制
/*1*/
{
        "_id" : ObjectId("5d654ed25616a9d461bc0aa7"),
        "aC" : "AB",
        "aI" : "ABCD",
        "aN" : "000000002001",
        "aT" : "CA",
        "bID" : NumberLong(0),
        "pD" : "2019-06-18",
        "transactions" : [ 
            {
                "seqNo" : 1,
                "tC" : "S"
            }, 
            {
                "seqNo" : 2,
                "tC" : "S"
            },
            {
                "seqNo" : 3,
                "tC" : "S"
            }
        ]
    }

/*2*/
{
        "_id" : ObjectId("5d654ed25616a9d461bc0aa8"),
        "aC" : "AB",
        "aI" : "ABCD",
        "aN" : "000000002002",
        "aT" : "CA",
        "bID" : NumberLong(0),
        "pD" : "2019-06-18",
        "transactions" : [ 
            {
                "seqNo" : 1,
                "tC" : "S"
            }, 
            {
                "seqNo" : 2,
                "tC" : "S"
            },
            {
                "seqNo" : 3,
                "tC" : "S"
            }
        ]
    }

在从“事务数组”中删除重复项之后。我将创建"A“集合的主要索引如下,

代码语言:javascript
复制
{
"aC" : 1.0,
"aI" : 1.0,
"aN" : 1.0,
"aT" : 1.0,
"bID" : 1.0,
"pD" : 1.0

}

请帮助我从"A“集合中移除重复的文档,以便我可以启用"A”集合的索引吗?

在查询方面需要帮助。

提前谢谢。这会很有帮助的。

EN

回答 1

Stack Overflow用户

发布于 2022-11-10 07:00:31

有一种方法你可以做到。

代码语言:javascript
复制
db.collection.update({
  "transactions": {"$type": "array"}
},
[
  {
    "$set": {
      "transactions": {"$setUnion": "$transactions"}
    }
  }
],
{"multi": true}
)

mongoplayground.net上试一试。

编辑

我不知道是mongoplayground.net还是MongoDB的“奇怪”/bug,但我怀疑有什么东西“重新排序”了"transactions"数组对象中的字段。

这里有一个“解决方案”,它在"$setUnion"之前重写每个元素。

代码语言:javascript
复制
db.collection.update({
  "transactions": {"$type": "array"}
},
[
  {
    "$set": {
      "transactions": {
        "$setUnion": {
          "$map": {
            "input": "$transactions",
            "as": "xaction",
            "in": {
              "seqNo": "$$xaction.seqNo",
              "tC": "$$xaction.tC"
            }
          }
        }
      }
    }
  }
],
{"multi": true}
)

mongoplayground.net上试一试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74385038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档