2015-01-13 2 views
0

У меня есть документ, в названиях коллекций user, которая выглядит следующим образом:Как вставить внутренний документ в существующий документ в mongodb в java?

{ 
    "_id" : "[email protected]", 
    "Password" : "xyz", 
    "first_name" : "ABC", 
    "last_name" : "PQR", 
} 

Я хочу, чтобы вставить внутренний документ job_desc, имеющие некоторые записи, как job, place, salary после изменения user документа становится как этот

{ 
    "_id" : "[email protected]", 
    "Password" : "xyz", 
    "first_name" : "ABC", 
    "last_name" : "PQR", 
    "doc" : { "job_desc" : "Design Engineer", "place" : "Bengaluru", "salary" : 40K USD } 
} 

Я пробовал использовать append, но он предназначен для ввода нового документа, а затем с использованием $set, но он используется для замены cing указанное значение. Как я могу удовлетворить свои требования?

+1

Я не забочусь о репутации, но вы запрашиваете java-код в своем вопросе, вы только что упомянули $ set и с учетом образца документа, в следующий раз уточните, что именно вы хотите – Disposer

+0

@Disposer сэр, пожалуйста, просмотрите вопрос. Первоначально его спрашивали в java. Я думал, что все пытаются в java только. –

ответ

2

Вставьте новый вложенный объект с помощью Java

BasicDBObject doc = new BasicDBObject("doc",new BasicDBObject("job","Design Engineer").append("place","Bengaluru").append("salary", "40K USD")); 
    BasicDBObject query = new BasicDBObject(); 
    query.put("_id","[email protected]"); 
    BasicDBObject set = new BasicDBObject("$set", doc); 
    collection.update(query, set); 

// result doc 
{ 
    "_id" : "[email protected]", 
    "Password" : "xyz", 
    "first_name" : "ABC", 
    "last_name" : "PQR", 
    "doc" : { 
     "job" : "Design Engineer", 
     "place" : "Bengaluru", 
     "salary" : "40K USD", 
    } 
} 

При использовании Монго консоли этого код для добавления только одно значения к существующему вложенному документу (или событие, не существует):

db.collection.update({"_id":"[email protected]"}, {$set : {'doc.newField' : 'newValue'}}) 

результат будет:

// modified doc 
{ 
    "_id" : "[email protected]", 
    "Password" : "xyz", 
    "first_name" : "ABC", 
    "last_name" : "PQR", 
    "doc" : { 
     "job" : "Design Engineer", 
     "place" : "Bengaluru", 
     "salary" : 500, 
     "newField" : "newValue" 
    } 
} 
+0

где указать существующий документ в коде? –

+0

Что это за мой друг. Кстати, он находится в рупиях и, пожалуйста, решите проблему. Спасибо за комментарий. Это было забавно :) –

+1

@SatishPatel Не обижайтесь, но я не встаю с постели за рулоны 500K, если я не путешествую. Я думаю, что автор здесь был на правильном пути, но, как я уже сказал, вы, вероятно, хотите «установить» все вложенные значения в объекте, а не только одно свойство. Поэтому я давал @Disposer возможность изменить это, потому что я знаю, что они в основном понимают этот принцип. Тем не менее требуемый код в моем комментарии. Но если вашему боссу нужно больше знаний на борту, тогда да 600 000 долларов США в год будет приемлемым предложением. –

Смежные вопросы