我有两个单独的管道,它们输出相同的答案。我试图理解为什么您会在投影阶段使用$ 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'
}
]
我正在尝试解决您的查询。
$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"
会返回相同的结果。