8

我有一个device收藏。

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

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

4

5 回答 5

11

$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();
于 2015-04-02T13:29:13.597 回答
1

自此帖子打开以来已经很长时间了,但将来可能对某人有用。

device.updateMany(eq("_id", "whatever"), unset("userId"));
于 2021-02-06T10:06:09.543 回答
1

最简单的方法是使用 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().

于 2016-02-14T19:05:09.840 回答
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);
于 2015-04-02T11:00:51.207 回答
-2

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

于 2015-04-02T13:01:37.363 回答