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

使用Java mongo驱动程序从集合中删除对象,java,mongodb,Java,Mongodb,这是我的示例代码: DBCollection coll = db.getCollection("testCollection"); BasicDBObject search = new BasicDBObject("$search", "mytextsearch"); BasicDBObject textSearch = new BasicDBObject("$text", search); BasicDBObject projection = new BasicDBObject("scor

这是我的示例代码:

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后删除它。

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

投影后,DBObject有一个新字段
textScore=something
。然后将该DBObject传递给
.remove()
时,数据库将只删除一个文档,该文档也包含一个字段
textScore
,该字段的值与该字段的值相同。因为集合中的原始文档没有此字段,所以不会将其删除

那么你会怎么做呢


创建一个新的
BasicDBObject
,其中只包含要删除的文档的
\u id
,而不包含其他内容。由于
\u id
字段始终是唯一的并自动索引,因此这将是明确且快速的。然后把这个传给
。删除

太糟糕了,我还没有15的声望,否则我会给你+1。谢谢你的明确回答。