gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:57:00 24 4
gpt4 key购买 nike

这是我的示例代码:

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,其中仅包含要删除的文档的 _id,而没有其他内容。由于 _id 字段始终是唯一的并且自动索引,因此这将是明确且快速的。然后将其传递给 .remove

关于java - 使用 Java mongo 驱动程序从集合中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23794926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com