我需要按_id对文档进行分组,当匹配有效对我的结果进行分类时,我做出了一个查询,该查询为true,但是每次匹配都会生成一个文档,我想将所有_id相等的文档归为一个文档。还有其他方法吗?找到比赛的特定条件时,他会退还给我找到的条件
我已经尝试使用$group:{_id:{"$_id"} }
db.collection('data').aggregate( [
{
$facet: {
"teste1": [
{ $match: { "estabelecimento": {$regex: palavra, $options:'i'} } },
{ $addFields: { "teste1": true } }
],
"teste2": [
{ $match: { "nome": {$regex: palavra, $options:'i'} } },
{ $addFields: { "teste2": true } }
],
"teste3": [
{ $match: { "tags": {$regex: palavra, $options:'i'} } },
{ $addFields: { "teste3": true } }
]
}
}, {
$project: {
"allDocuments" : { $setUnion: [ "$teste1", "$teste2", "$teste3" ] }
}
}, {
$unwind: "$allDocuments"
}, {
$replaceRoot: {
newRoot: "$allDocuments"
}
}, {
$project: {
"nome": 1,
"seller_id":1,
"descricao":1,
"tags":1,
"estabelecimento":1,
"teste1": 1,
"teste2":1,
"teste3":1
}
}
])
我当前的结果:
{
_id: 5d29e0f9942fdb56a515ffd4,
seller_id: 10,
nome: 'nescau',
descricao: 'nescau eh muito gostoso',
estabelecimento: 'Nescaleiro',
tags: 'chocolate,nescaus,achocolatado',
teste1: true
},
{
_id: 5d29e0f9942fdb56a515ffd4,
seller_id: 10,
nome: 'nescau',
descricao: 'nescau eh muito gostoso',
estabelecimento: 'Nescaleiro',
tags: 'chocolate,nescaus,achocolatado',
teste2: true
},
{
_id: 5d29e0f9942fdb56a515ffd4,
seller_id: 10,
nome: 'nescau',
descricao: 'nescau eh muito gostoso',
estabelecimento: 'Nescaleiro',
tags: 'chocolate,nescaus,achocolatado',
teste3: true
}
我想收到:
{
_id: 5d29e0f9942fdb56a515ffd4,
seller_id: 10,
nome: 'nescau',
descricao: 'nescau eh muito gostoso',
estabelecimento: 'Nescaleiro',
tags: 'chocolate,nescaus,achocolatado',
teste1: true,
teste2: true,
teste3: true
}
答案 0 :(得分:0)
在没有文档示例的情况下进行推测,管道可能是这样的:
db.collection('data').aggregate( [
{
$match: { $or: [
{ "estabelecimento": {$regex: palavra, $options:'i'} },
{ "nome": {$regex: palavra, $options:'i'} },
{ "tags": {$regex: palavra, $options:'i'} }
] }
}, {
$addFields: {
teste1: { $regexMatch: { input: "$estabelecimento", regex: /palavra/i } },
teste2: { $regexMatch: { input: "$nome", regex: /palavra/i } },
teste3: { $regexMatch: { input: "$tags", regex: /palavra/i } }
}
}
])