从MongoDB中删除具有特定键数的文档

时间:2015-03-16 09:13:07

标签: javascript mongodb mongodb-query

我有用户的集合,我想从中删除只有2个字段的文档。我的一般架构是这样的:

{
_id: 1,
name: af,
city: asd,
transaction: 1,
transactions:[{
    id:1,
    product: mobile,
    amount: 10
   },
    id:2,
    product: tv,
    amount: 23
   }],
many-other-sub-docs:[],
}

我想删除只有_id&的文档transaction字段存在但不存在其他字段。

  

注意:我有大约30-40个字段。

删除这些文档的一种方法是指定查询中不应存在的所有字段&只有那些应该存在的领域。 对于例如db.users.remove({_id:{$exists:true}, transaction:{$exists:true}, other_field1:{$exists:false}, other_field2:{$exists:false}, ...}) 但我觉得这个问题很荒谬。此外,我必须找到我的收藏中的所有字段。

还有其他更简单的方法吗?

1 个答案:

答案 0 :(得分:5)

是的,有更好的方法可以做到这一点。我不能保证你表现得很好,但它可能并不比你现在做的更糟糕。您使用$where的JavaScript评估。

_id键始终存在,因此您要查找的只是测试另一个字段的存在。然后,文档的总“字段数”为2.如:

db.collection.remove({
    "transaction": { "$exists": true },
    "$where": "return Object.keys(this).length == 2"
})

因此,只需测试文档键数组的长度即可获得预期值。