java - data - push element to array mongodb
(MongoDB Java) $ push en matriz (4)
Estoy usando mongo 2.2.3 y el controlador de Java. Mi dilema, tengo que $ presionar un campo y valorizarlo en una matriz, pero no puedo entender cómo hacerlo. Una muestra de mis datos:
"_id" : 1,
"scores" : [
{
"type" : "homework",
"score" : 78.97979
},
{
"type" : "homework",
"score" : 6.99
},
{
"type" : "quiz",
"score" : 99
}
]
Puedo presionar $ en el caparazón:
db.collection.update({_id:1},{$push:{scores:{type:"quiz", score:99}}})
pero es cuando traduzco esto a java, me confundo y atojo mi teclado contra la pared.
mi código de Java (incompleto e incorrecto) hasta el momento:
DBObject find = new BasicDBObject("_id", 1);
DBObject push = new BasicDBObject("$push", new BasicDBObject(
"scores", new BasicDBObject()));
Desde mongodb-driver 3.1.
hay una clase de constructor com.mongodb.client.model.Updates
con los métodos apropiados para cada caso de actualización. En este caso, esto sería:
Document score = new Document().append("type", "quiz")
.append("score",99);
collection.updateOne(eq("_id", "1"),Updates.addToSet("scores", score));
Si es más cómodo con el formato de consulta del shell, puede encontrar que es más fácil usar JSON.parse
para contornear su DBObject
para $push
:
import com.mongodb.util.JSON;
String json = "{$push:{scores:{type:''quiz'', score:99}}}";
DBObject push = (DBObject) JSON.parse(json);
Usando Jongo, puedes hacer lo mismo que en el shell :
db.collection.update({_id:1},{$push:{scores:{type:"quiz", score:99}}})
Se convierte en Java:
collection.update("{_id:1}").with("{$push:{scores:{type:#, score:#}}}", "quiz", 99);
No se necesita DBObject de lujo ;-)
DBObject listItem = new BasicDBObject("scores", new BasicDBObject("type","quiz").append("score",99));
DBObject updateQuery = new BasicDBObject("$push", listItem);
myCol.update(findQuery, updateQuery);