【问题标题】:How to search a document and remove field from it in mongodb using java?如何使用java在mongodb中搜索文档并从中删除字段?
【发布时间】:2023-04-08 17:52:01
【问题描述】:

我有一个device 收藏。

{
   "_id" : "10-100-5675234",
   "_type" : "Device",
   "alias" : "new Alias name", 
   "claimCode" : "FG755DF8N", 
   "hardwareId" : "SERAIL02",
   "isClaimed" : "true",
   "model" : "VMB3010", 
   "userId" : "5514f428c7b93d48007ac6fd" 
 }

我想通过_id 搜索文档,然后在从结果文档中删除字段userId更新它。我正在尝试不同的方法,但它们都不起作用。请帮帮我。

【问题讨论】:

  • 您能否提供有关您到目前为止所做的工作的简要信息,并提供更多描述,例如示例文档、您要从该文档中删除的字段等?
  • 我的收藏是这样的,我想通过_id搜索收藏,然后从数据库中删除用户ID字段。 {“_id”:“10-100-5675234”,“_type”:“设备”,“别名”:“新别名”,“claimCode”:“FG755DF8N”,“hardwareId”:“SERAIL02”,“isClaimed” :“真”,“模型”:“VMB3010”,“用户ID”:“5514f428c7b93d48007ac6fd”}
  • @dev 此链接提供的是从某些 get 操作的结果中删除字段。我想要一些类似更新的东西,我们提供搜索和删除。

标签: java mongodb mongodb-query mongo-java-driver


【解决方案1】:

您可以通过这种方式使用 $unset 和 mongo-java 驱动程序删除字段:

    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()中。

    【讨论】:

      【解决方案3】:

      这篇文章已经打开很久了,但将来可能对某人有用。

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

      【讨论】:

        【解决方案4】:

        一个丑陋的方法是用新版本的文档替换旧版本(没有用户 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);
        

        【讨论】:

          【解决方案5】:

          MongoDB 文档为此问题提供了clear answer:使用 $unset 更新运算符。

          【讨论】:

            猜你喜欢
            • 2020-11-21
            • 2011-10-14
            • 1970-01-01
            相关资源
            最近更新 更多