2013-08-30 2 views
1

Существует ли вообще существующее изменение обычных запросов Mongodb на конкретные запросы драйвера Java Mongodb? Я хочу знать, есть ли эквивалентный запрос в Java Mongodb драйвер для каждого запроса обычного MongoDB? Поскольку у нас есть примеры, запрашивающие массив поддокументов в обычном Mongodb, но для того, чтобы сделать то же самое с помощью драйвера Java MongoDB, у нас нет достаточных примеров.запрос массива объектов с использованием драйвера Java Mongodb

+0

Можете ли вы привести пример запроса, который, вероятно, реализовать в JAva и иметь в формате оболочки? В то время как это было бы намного больше здесь, и, вероятно, вы получите быстрый ответ. Также было бы здорово, если бы вы могли поставить какую-то информацию там, где вы боретесь, и каковы симптомы, пока вы не можете идти вперед. – attish

+0

Например, запросы, в которых используются $ elemmatch, $ slice, $ push (все операторы индексирования массива). Есть ли способ сделать то же самое в запросах на основе Java Mongodb? – user2702205

ответ

3

Java-драйвер с питоном является самым развитым, поэтому вы можете проверить его в драйвере DOCS. Обычно идея (структура команд) такая же, как в оболочке, вам просто нужны помощники для создания команды.

В Java эта документация может сделать некоторые подсказки о том, как это работает: DOCS

так для

$ толчке:

Mongoshell DOCS пример:

db.students.update(
        { name: "joe" }, 
        { $push: { scores: 89 } } 
       ) 

Где {name: "joe"} - это запрос, идентифицирующий правильный документ для обновления, а баллы - это поле массива, а 89 - аббревиатура.

Java DOCS

пример: проверить этот вопрос: (MongoDB Java) $push into array

$ elemmatch:

DOCS Mongoshell

пример: проверить этот вопрос: Convert MongoDB query into Java

$ ломтика:

Mongoshell DOCS

Синтаксис:

db.collection.update(<query>, 
         { $push: { 
           <field>: { 
              $each: [ <value1>, <value2>, ... ], 
              $slice: <num> 
              } 
           } 
         } 
        ) 

В Java что-то вроде (Просто потому что я не нашел для этого точного обновления uitilized среза в качестве примера в java это построено мной):

final MongoClient mongoClient = new MongoClient(); 
final DBCollection coll = mongoClient.getDB("TheDatabase").getCollection("TheCollection"); 
coll.update(<query>, new BasicDBObject("$push", 
         new BasicDBObject(<field>, 
              new BasicDBObject("$each", 
               new BasicDBList() 
                .put(0,<value1>) 
                .put(1,<value2>) 
                .put(3,<value3>)) 
              .append('$slice',-5))); 

пример: проверить эти вопросы слишком для использования среза в других случаях: $slice mongoDB Java, Mongo java driver - retrieve slice of array without any other field или эта нить: https://groups.google.com/forum/#!topic/mongodb-user/4c3P0_FOzyM

+0

Да, я проверил то же самое в Spring data Mongodb. Я нашел эквивалент, существующий и в этом. Но для использования $ slice в Spring данных MongoDB я не смог найти ссылку? Можете ли вы мне помочь? – user2702205

+0

Прошу прощения, к сожалению, у меня нет слишком много опыта. с данными Spring MongoDB, я быстро проверил и ничего не нашел. – attish

2

Там нет автоматического способа преобразования оболочки запросов к Java запросам, но все запросы, которые поддерживаются в оболочке, поддерживаются в Java-драйвере.Как и в примере Attish дал, везде вы видите

{ "$someOperator" : { "someKey": "someValue" } } 

вам необходимо преобразовать те использовать BasicDBObject:

new BasicDBObject("$someOperator", new BasicDBObject("someKey", "someValue")); 

эффективно

{ key : value } 

->

new BasicDBObject (key, value); 
Смежные вопросы