分组构面的多个文档

时间:2019-07-15 13:09:33

标签: node.js mongodb

我需要按_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
  }

1 个答案:

答案 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 } }
        }
    }
])