MongoDB -如何在多个文档中查询唯一字段?

wooyq4lh  于 2023-03-17  发布在  Go
关注(0)|答案(3)|浏览(173)

我有一个数据库中有80,000个文档,每个文档都有一个名为Location的字段,如下所示:

地点:“82 Some Street|高塔姆PS M1M 1M1”

此地址字段在许多文档中重复。我想进行一个查询,仅在位置字段中对具有唯一地址的文档进行计数。如何操作?
因此,即使我有80,000个文档,可能只有50,000个是唯一的,其他30,000个有重复的地址,所以我希望准确地计算50,000个。
我想首先,我必须搜索所有的地址,然后把重复的拿出来,然后做一个计数?
我试过明确的命令,但失败了。

2hh7jdfx

2hh7jdfx1#

您可以使用聚合框架来完成此操作:

  • $group-获取每个地址的计数
  • $group-获取唯一地址的总数
db.collection.aggregate([
  {
    "$group": {
      "_id": "$address",
      "count": {
        "$sum": 1
      }
    }
  },
  {
    "$group": {
      "_id": null,
      "total_unique": {
        "$sum": {
          "$cond": [
            {
              "$eq": [
                "$count",
                1
              ]
            },
            1,
            0
          ]
        }
      }
    }
  }
])

Working example

djmepvbi

djmepvbi2#

您可以使用以下查询:

db.collection.aggregate([
  {
    "$group": {
      "_id": "$Location",
      "count": {
        "$sum": 1
      }
    }
  },
  {
    "$match": {
      count: 1
    }
  },
  {
    "$count": "uniqueAddresses"
  }
])

在此查询中,首先,我们按address对文档进行分组并计算counts。接下来,我们只保留值为1的计数。然后使用$count运算符计算计数。
Playground link.

nbysray5

nbysray53#

  • 也许你该试试
let location="82 Some Street | Gautham PS M1M 1M1";

  const getUniqueLocations = await YourDB.find({location : {$ne: location}}).countDocuments();

countDocuments()返回计数。

相关问题