如何使用Java在MongoDB中搜索文档并删除其中的字段?

8
我有一个设备集合。
{
   "_id" : "10-100-5675234",
   "_type" : "Device",
   "alias" : "new Alias name", 
   "claimCode" : "FG755DF8N", 
   "hardwareId" : "SERAIL02",
   "isClaimed" : "true",
   "model" : "VMB3010", 
   "userId" : "5514f428c7b93d48007ac6fd" 
 }

我希望通过 _id 搜索文档,然后从结果文档中删除字段 userId 后进行 更新。我尝试了不同的方法,但都没有成功。请帮助我。


请您提供一下您目前所做的工作的简要信息,并提供更多的描述,例如示例文档、您想要从该文档中删除的字段等。 - Vishwas
这可能会对您有所帮助。https://dev59.com/YnbZa4cB1Zd3GeqPCSN5 - Dev
我的集合是这样的,我想通过 _id 搜索集合,然后从数据库中删除 userid 字段。{ "_id" : "10-100-5675234", "_type" : "Device", "alias" : "新别名", "claimCode" : "FG755DF8N", "hardwareId" : "SERAIL02", "isClaimed" : "true", "model" : "VMB3010", "userId" : "5514f428c7b93d48007ac6fd" } - Swapnil1988
1
@dev 这个链接提供的是从某些获取操作的结果中删除一个字段。我想要像更新一样提供搜索和删除的功能。 - Swapnil1988
5个回答

11

您可以使用mongo-java驱动程序中的$unset以以下方式删除字段:

    MongoClient mongo = new MongoClient("localhost", 27017);
    DB db = (DB) mongo.getDB("testDB");
    DBCollection collection = db.getCollection("collection");
    DBObject query = new BasicDBObject("_id", "10-100-5675234");
    DBObject update = new BasicDBObject();
    update.put("$unset", new BasicDBObject("userId",""));
    WriteResult result = collection.update(query, update);
    mongo.close();

2
最简单的方法是使用Java驱动程序中的功能:
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(new ObjectId("10-100-5675234")));
Update update = new Update();
update.unset("userId"); //the fields you want to remove
update.set("putInYourFieldHere", "putInYourValueHere"); //the fields you want to add
mongoTemplate.updateFirst(query, update, Device.class);

以上代码假定您的"_id"是您的mongodb正常"_id",这意味着您要查找的变量必须包含在new ObjectId()中。

2

这篇帖子已经发布很久了,但对于未来的某些人可能会有用。

device.updateMany(eq("_id", "whatever"), unset("userId"));

0

一种不太优雅的方法是用新版本替换旧版本的文档(没有用户ID)。

BasicDBObject newDocument = new BasicDBObject();
newDocument.put("_type", "Device");
newDocument.put("alias", "new Alias name");
// ...  

BasicDBObject searchQuery = new BasicDBObject().append("_id", "10-100-5675234");

collection.update(searchQuery, newDocument);

-3
MongoDB文档提供了一个明确的答案来回答这个问题:使用$unset更新操作符。

it is not in java - BabyishTank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接