簡體   English   中英

MongoDb 的 $set 等效於其 java 驅動程序

[英]MongoDb's $set equivalent in its java Driver

有沒有一種方法可以通過其 Java 驅動程序修改 MongoDb 中的一個鍵的值。 我嘗試了以下方法:

someCollection.update(DBObject query, DBObject update);
someCollection.findAndModify(DBObject query, DBObject update);

但是這兩個函數都用更新的文檔完全替換了查詢的文檔。 在 mongo shell 中使用 $set 的情況下,僅更新特定鍵的一個值的方法是什么(除了制作一個全新的文檔,其中復制了所有字段並更新了其中一個字段)。

BasicDBObject carrier = new BasicDBObject();
BasicDBObject query = new BasicDBObject();
query.put("YOUR_QUERY_STRING", YOUR_QUERY_VALUE);

BasicDBObject set = new BasicDBObject("$set", carrier);
carrier.put("a", 6);
carrier.put("b", "wx1");        
myColl.updateMany(query, set);

這應該有效,被接受的答案不在上面。

嘗試這樣的事情:

BasicDBObject set = new BasicDBObject("$set", new BasicDBObject("age", 10));
set.append("$set", new BasicDBObject("name", "Some Name"));
someCollection.update(someSearchQuery, set);

也看看這個例子

上面提到的解決方案都不適合我。 我意識到查詢應該是 Document 類型而不是 BasicDBObject :

Document set = new Document("$set", new Document("firstName","newValue"));

yourMongoCollection.updateOne(new Document("_id",objectId), set);

其中“yourMongoCollection”是“MongoCollection”類型,“objectId”是“ObjectId”類型

首先,除非我想重新配置/重新格式化/“重新輸入”我的值,否則我只會使用findAndModify不是update

這是用於 c&p 目的的完整工作示例......享受:

    Boolean updateValue(DB db, DBCollection collection, String id, String key, Object newValue)
    {
        DBCollection collection = db.getCollection(<collection name>);

        // Identify your required document (id, key, etc...)
        DBObject     query      = new BasicDBObject("_ID",<ID or key value>);
        DBObject     update     = new BasicDBObject("$set", new BasicDBObject(key, newValue));

        //These flags will guarantee that you'lls get the updated result
        DBObject     result     = collection.findAndModify(query, null, null, false, update,true, true);

        //Just for precaution....
        if(result == null)
            return false;

        return result.get(key).equals(newValue);
    }

上一個答案為我指明了正確的方向,但是向更新添加第二個對象的代碼對我不起作用。 做了以下事情:

BasicDBObject newValues = new BasicDBObject("age", 10);
newValues.append("name", "Some Name");
BasicDBObject set = new BasicDBObject("$set", newValues);
collection.update(someSearchQuery, set);

根據文檔, $set$addFields ,所以只需使用它:

        var iterable = collection.aggregate(Arrays.asList(
                Aggregates.addFields(new Field("foo", "bar"))
        ));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM