我有一个数据库中有80,000个文档,每个文档都有一个名为Location的字段,如下所示:
地点:“82 Some Street|高塔姆PS M1M 1M1”
此地址字段在许多文档中重复。我想进行一个查询,仅在位置字段中对具有唯一地址的文档进行计数。如何操作?因此,即使我有80,000个文档,可能只有50,000个是唯一的,其他30,000个有重复的地址,所以我希望准确地计算50,000个。我想首先,我必须搜索所有的地址,然后把重复的拿出来,然后做一个计数?我试过明确的命令,但失败了。
2hh7jdfx1#
您可以使用聚合框架来完成此操作:
$group
db.collection.aggregate([ { "$group": { "_id": "$address", "count": { "$sum": 1 } } }, { "$group": { "_id": null, "total_unique": { "$sum": { "$cond": [ { "$eq": [ "$count", 1 ] }, 1, 0 ] } } } } ])
Working example
djmepvbi2#
您可以使用以下查询:
db.collection.aggregate([ { "$group": { "_id": "$Location", "count": { "$sum": 1 } } }, { "$match": { count: 1 } }, { "$count": "uniqueAddresses" } ])
在此查询中,首先,我们按address对文档进行分组并计算counts。接下来,我们只保留值为1的计数。然后使用$count运算符计算计数。Playground link.
address
counts
$count
nbysray53#
let location="82 Some Street | Gautham PS M1M 1M1"; const getUniqueLocations = await YourDB.find({location : {$ne: location}}).countDocuments();
countDocuments()返回计数。
3条答案
按热度按时间2hh7jdfx1#
您可以使用聚合框架来完成此操作:
$group
-获取每个地址的计数$group
-获取唯一地址的总数Working example
djmepvbi2#
您可以使用以下查询:
在此查询中,首先,我们按
address
对文档进行分组并计算counts
。接下来,我们只保留值为1的计数。然后使用$count
运算符计算计数。Playground link.
nbysray53#
countDocuments()返回计数。