首页 > 解决方案 > Mongodb聚合获取搜索结果的计数

问题描述

我为下面的数据字段设置索引,然后尝试获取特定文本搜索内容和所有文本内容的计数

我的输入如下:

{
_id: 14572
data: "selling bike in india"
}
{
_id: 14673
data: "sale bike in india"
}
{
_id: 14673
data: "buying cars in india"
}

我厌倦了从收集中获取汽车、自行车和总文件的数量,不幸的是没有得到它,

db.collection.aggregate([
  { 
    "Total": [
      {$match:{"$text":{$search:"india"}}},
      { "$count": "Total" },
    ],
    "bike": [
      {$match:{"$text":{$search:"bike"}}},
      { "$count": "bike" }
      ]

  { "$project": {
    "Total": { "$arrayElemAt": ["$Total.Total", 0] },
    "bike": { "$arrayElemAt": ["$bikebike.Birds", 0] }
  }}
]) 

预期输出如下

Total:3
bike:2
car:1

标签: mongodbgroup-byaggregation-framework

解决方案


$text操作员在https://docs.mongodb.com/manual/reference/operator/query/text/index.html中有一些限制

与此查询相关的一对:

一个查询最多可以指定一个 $text 表达式。

如果在聚合中使用 $text 运算符,则以下限制也适用。
包含 $text 的 $match 阶段必须是管道中的第一个阶段。

由于您尝试对不同的字符串进行单独的文本搜索,因此您需要分别进行每一个搜索,例如

db.collection.count({$text:{$search:"india"}})
db.collection.count({$text:{$search:"bike"}})
db.collection.count({$text:{$search:"car"}})

推荐阅读