有条件地去除骨料

时间:2019-06-09 21:49:21

标签: mongodb

我有一个文档集合,如下例文件所示:

{
    'publicacao' : { 'data': '2013-13-13', 'hora': '13:13:13'},
    'conteudo' : 'https://docs.google.com/document/d/1EQynJTiBa6FNI2O8XfoV0clMPxS5uOAu0_jKyEwsTBE/edit?usp=sharing',
    'titulo' : 'As histórias de ciclano',
    'categoria' : 'Romance',
    'autor' : 'Ciclano',
    'avaliacoes': [
        {
            'leitor': 'Fulano',
            'nota': 1 
    },
    {
        'leitor': 'Beltrano',
        'nota': 0 
    }
    ],
    'denuncias': [
    {
        'denunciante': 'Ciclano'
    },
    {
        'denunciante': 'Beltrano'
    }
    ]
}

然后我汇总了一些要删除的文档:

var cursor = db.livro.aggregate( [
{
    $project: { 
        id:1,
        remover: {
            $gt: [
                { $size: "$denuncias" },
        { 
            $divide: [
                { $size: "$avaliacoes" },
                2
                ]
            }
        ]
        }
    }
}
]);

此聚合返回以下文档:

{ "_id" : ObjectId("5cf5a9be7d48c53504974439"), "remover" : false }
{ "_id" : ObjectId("5cf5a9be7d48c5350497443a"), "remover" : false }
{ "_id" : ObjectId("5cf5a9be7d48c5350497443b"), "remover" : true }
{ "_id" : ObjectId("5cfd746e40d53565ca52132b"), "remover" : false }
{ "_id" : ObjectId("5cfd746e40d53565ca52132c"), "remover" : false }
{ "_id" : ObjectId("5cfd746e40d53565ca52132d"), "remover" : true }

我需要删除所有带有“删除”的文档:true。 我不知道该怎么买!

2 个答案:

答案 0 :(得分:0)

已解决: 我使用cursor.forEach()来迭代对象并使用remove = true查找对象。

cursor.forEach(function (doc){ 
    if(doc.remover == true) { 
        db.livro.remove({"_id": doc._id}); 
        print("Doc removido: "+ doc._id) 
    } 
});

答案 1 :(得分:0)

与其在查询后使用代码来完成此操作,不如在实际聚合中进行总体上更好。只需使用$match检查数组是否具有元素:

db.collection.aggregate([
  {
    $match: {
      "denuncias.0": {
        $exists: true
      }
    }
  },
  {
    $project: {
      id: 1,
      remover: {
        $gt: [
          {
            $size: "$denuncias"
          },
          {
            $divide: [
              {
                $size: "$avaliacoes"
              },
              2
            ]
          }
        ]
      }
    }
  }
])

您可以查看是否working here