使用Java mongo驱动程序从集合中删除对象

时间:2014-05-21 22:29:10

标签: java mongodb

这是我的示例代码:

DBCollection coll = db.getCollection("testCollection");

BasicDBObject search = new BasicDBObject("$search", "mytextsearch");
BasicDBObject textSearch = new BasicDBObject("$text", search);

BasicDBObject projection = new BasicDBObject("score", new BasicDBObject("$meta",   "textScore"));
myDoc = coll.findOne(textSearch, projection);

这应该找到文件,我称之为myDoc,搜索“mytextsearch”得分最高。

然后,我想从集合中删除此文档,所以我做了:

coll.remove(myDoc);

但是,这对集合没有影响,永远不会删除myDoc。我究竟做错了什么?我希望能在找到之后删除myDoc。

1 个答案:

答案 0 :(得分:1)

remove-method不会删除传递给它的文档。它会删除所有与传递的DBObject相同的所有字段的文档。在这种情况下,为什么这种区别很重要?因为您使用投影来更改文档。

投影后,DBObject有一个新字段textScore=something。然后,当您将该DBObject传递给.remove()时,数据库将仅删除具有该确切值的字段textScore的文档。由于集合中的原始文档没有此字段,因此不会被删除。

那你做什么呢?

创建一个新的BasicDBObject,其中只包含您要删除的文档的_id,而不包含其他内容。因为_id字段始终是唯一的并且自动编入索引,所以这将是明确且快速的。然后将这一个传递给.remove