2015-04-01 4 views
3

У меня есть коллекция device.Как найти документ и удалить поле из него в mongodb с помощью java?

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

Я хочу найти документ по _id, а затем обновление его после удаления поля userId из результирующего документа. Я пытаюсь по-разному, но никто из них не работает. Пожалуйста, помогите мне.

+0

Можете ли вы предоставить краткую информацию о том, что вы сделали до сих пор, и предоставить более подробное описание, например, образец документа, поле, которое вы хотите удалить из этого документа и т. Д.? – Vishwas

+0

Это может помочь вам .http: //stackoverflow.com/questions/18455937/remove-id-from-mongodb-result-java –

+0

моя коллекция похожа на эту, и я хочу искать ее через _id, а затем удалить поле userid из базы данных. { "_id": "10-100-5675234", "_type": "Device", "псевдоним": "Новое имя Alias", "claimCode": "FG755DF8N", "HardwareID": «SERAIL02 », „isClaimed“:„правда“, „модель“:„VMB3010“, „идентификатор пользователя“:„5514f428c7b93d48007ac6fd“ } – Swapnil1988

ответ

5

Вы можете удалить поле с помощью $unset с драйвером Монго-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(); 

Узнайте больше на сайте: http://www.journaldev.com/4334/mongodb-update-document-set-all-example-mongo-shell-java-driver

0

Уродливым способом является замена старой версии новой версией документа (без идентификатора пользователя).

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); 
0

Документация MongoDB обеспечивает clear answer на этот вопрос: использовать отключенный оператор обновления $.

0

Самый простой способ заключается в использовании функции в драйвере 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().