(MongoDB Java) $ push в массив

Я использую mongo 2.2.3 и java-драйвер. Моя дилемма, я должен $ нажимать поле и значение в массив, но я не могу понять, как это сделать. Образец моих данных:

"_id" : 1, "scores" : [ { "type" : "homework", "score" : 78.97979 }, { "type" : "homework", "score" : 6.99 }, { "type" : "quiz", "score" : 99 } ] 

Я могу $ нажать в оболочке:

 db.collection.update({_id:1},{$push:{scores:{type:"quiz", score:99}}}) 

но когда я переводил это в java, я путаю себя и зажимал клавиатуру у стены.

мой код Java (неполный и неправильный):

 DBObject find = new BasicDBObject("_id", 1); DBObject push = new BasicDBObject("$push", new BasicDBObject( "scores", new BasicDBObject())); 

 DBObject listItem = new BasicDBObject("scores", new BasicDBObject("type","quiz").append("score",99)); DBObject updateQuery = new BasicDBObject("$push", listItem); myCol.update(findQuery, updateQuery); 

Поскольку mongodb-driver 3.1. существует class com.mongodb.client.model.Updates с соответствующими методами для каждого случая обновления. В этом случае это будет:

 Document score = new Document().append("type", "quiz") .append("score",99); collection.updateOne(eq("_id", "1"),Updates.addToSet("scores", score)); 

Если вы более совместимы с форматом запроса оболочки, вы можете обнаружить, что проще использовать JSON.parse для того, чтобы скомпоновать ваш DBObject для $push :

 import com.mongodb.util.JSON; String json = "{$push:{scores:{type:'quiz', score:99}}}"; DBObject push = (DBObject) JSON.parse(json); 

Используя Jongo, вы можете делать это как в оболочке :

 db.collection.update({_id:1},{$push:{scores:{type:"quiz", score:99}}}) 

Становится в Java:

 collection.update("{_id:1}").with("{$push:{scores:{type:#, score:#}}}", "quiz", 99); 

Необязательный DBObject не нужен 😉

Драйвер Java от MongoDB может упростить это. Используйте $ each вместо $ push.

$ каждый справочный документ mongodb

Пример Java –

  BasicDBObject addressSpec = new BasicDBObject(); addressSpec.put("id", new ObjectId().toString()); addressSpec.put("name", "one"); BasicDBObject addressSpec2 = new BasicDBObject(); addressSpec2.put("id", new ObjectId().toString()); addressSpec2.put("name", "two"); List list = new ArrayList<>(); list.add(addressSpec); list.add(addressSpec2); UpdateResult updateOne = individualCollection.updateOne(Filters.eq("_id", "5b7c6b612612242a6d34ebb6"), Updates.pushEach("subCategories", list)); 
Interesting Posts

Доступ и использование MobileWiFi.framework

Получить правильный локальный IP-адрес из java-апплета

В чем разница между angular.copy () и присваиванием (=)?

Могу ли я использовать CGAffineTransformMakeRotation для поворота изображения более чем на 360 gradleусов?

Как я могу конденсировать или суммировать список в Excel?

Разложение Холецкого с помощью OpenMP

Блокировка доступа к частным переменным-членам? Принудительное использование публичных объектов?

Как заставить HttpClient передавать учетные данные вместе с запросом?

Являются ли текстовые объявления Google Chrome вредоносными программами?

последовательность спящего oracleа создает большой разрыв

Java и GUI – Где ActionListeners принадлежат в соответствии с шаблоном MVC?

Есть ли способ сделать мой жесткий диск недоступным для всех, кроме меня?

Как очистить / что делать с получением жидкой формы очистителя сжатого воздуха на компьютерном оборудовании?

Как получить данные об авариях из моего приложения Android?

При построении конструктора по умолчанию невозможно обработать исключение: type Exception, созданный неявным супер-конструктором

Давайте будем гением компьютера.