MongoDB $ size-两个管道之间的差

问题描述 投票:0回答:1

我有两个单独的管道,它们输出相同的答案。我试图理解为什么您会在投影阶段使用$ size。我不太了解$ size运算符在此管道中正在做什么。

[
  {
    '$project': {
      'title': {
         $size: {
           '$split': [
               '$title', ' '
            ]
        }
      }
    }
  }, {
    '$match': {
      'title': {
        '$eq': 1
      }
    }
  }, {
    '$count': 'title'
  }
]

我重写了管道,以在$ match阶段使用$ size,并且输出是相同的。这两个算法是否有一些算法上的损失?

[
  {
    '$project': {
      'title': {
        '$split': [
          '$title', ' '
        ]
      }
    }
  }, {
    '$match': {
      'title': {
        '$size': 1
      }
    }
  }, {
    '$count': 'title'
  }
]
mongodb aggregation-framework size
1个回答
0
投票

我正在尝试解决您的查询。

$size计数并返回数组中项目的总数并且$ size的参数必须解析为数组。

  { 
    // "title" : "hello world"
    // { '$split': [ '$title', ' ' ] } -> [ "hello",  "world"]
    // { { $size:': .... }} -> 2
    '$project': { 'title': { $size: { '$split': [ '$title', ' ' ] } } }
  }, 
  {
    // Here you want to match whose title is equal to 2
    '$match': { 'title': { '$eq': 2 } }
  }

[$split转换字符串根据数组中的第二个参数将字符串划分为子字符串数组。

在第二点查询中

  { 
    // "title" : "hello world"
    // { '$split': [ '$title', ' ' ] } -> [ "hello",  "world"]
    // {  title: [ "hello",  "world"] }
    '$project': { 'title': { '$split': [ '$title', ' ' ]}}}
  },
  { 
    // Here you want to match whose title size is 2
    '$match': { 'title': { '$size': 2 }}
  } 

两者的查询都相同,但有区别。在您的情况下,title: "hello"会返回相同的结果。

© www.soinside.com 2019 - 2024. All rights reserved.