我有一个电影收藏集,我想查找所有带有一个单词名称的电影(例如:应返回“漂流”,而不是“鸟箱”)。我执行了以下操作,并且在Mongo Shell中执行命令后未返回任何内容。我看到只有'$ project'阶段的输出可以正常工作,所有的单字电影标题都具有'titleSize = true'。因此,我认为编写“ $ match”阶段的方式有问题。我是Mongo的新手,可能还不了解这个概念。我们将不胜感激,帮助您了解我在做什么错。
db.movies.aggregate([(
{$project:
{_id:0,
title:1,
"titleSize":{
$eq:[{$size:{$split: ["$title"," "]}},1]
}
}
},
{$match:
{"titleSize":true}
}
)])
答案 0 :(得分:0)
还有一个更好的选择:$expr
。通过find()
方法将其用作查询:
db.movies.find({
'$expr': {
'$eq': [
{ '$size': { '$split': ["$title", " "] } },
1
]
}
})
或者,如果您仍在使用当前的聚合管道,请通过删除左括号和右括号以及一些额外的括号来对其进行调整,您最终应该拥有:
db.movies.aggregate([
{ $project: {
_id: 0,
title: 1,
titleSize: {
$eq: [
{ $size: {
$split: ["$title", " "]
} },
1
]
}
} },
{ $match: { titleSize: true } }
])