我有一个mongo db集合,结构如下。
{
_id,
name,
companies: [{
name,
rating
address
}]
}
字符串
我创建了一个嵌入在字段www.example.com上的类型的atlas索引companies.name,当我使用这个索引查询时,我会在结果中得到整个文档,包括数组中不匹配的所有元素。我如何投影甚至找出哪个数组元素是匹配的。我不能使用突出显示,因为它不支持嵌入式文档数据类型。我可以从聚合管道中$展开结果,但是我必须自己在name字段上进行匹配。对我来说,另一个选择是重新构造文档,但这有其他含义。这里我的选择是什么?,我所需要的就是找出哪个元素是匹配的。
这是我的疑问。
let query1 = {
'$search': {
'index': 'businessname',
'embeddedDocument': {
'path': 'companies',
'operator': {
'queryString': {
'defaultPath': 'companies.name',
'query': `${tags} ~ 2`
}
}
}
}
}
let project = {
'$project': {
'_id': 1,
'displayName': 1,
'email': 1,
'companies.$': 1
}
}
型
我在使用companies时得到以下错误。$:1 MongoServerError:Invalid $project::caused by::无法在聚合投影中使用位置投影
1条答案
按热度按时间dfty9e191#
对数组中的数据执行
$match
总是返回整个数组。要只返回匹配的元素,请为$filter
添加另一个stage:字符串
如果你知道你的查询应该只产生1个项目(例如,在这种情况下,
companies.name
在数组中是唯一的),那么你可以通过返回单个对象而不是数组1来使它稍微简单一些:型