Нужно ли GORM / GMongo обернуть коллекции, чтобы принимать Карты? (Grails / GMongo внутренности.)

Я работаю с доменными объектами Grails Mongo и заметил, что я получаю совершенно другое поведение, используя следующие два способа доступа к коллекции:

c1: имя коллекции известно во время компиляции:

def c1 = MyDomainClass.collection

c2: имя коллекции известно только во время выполнения

def c2 = AnyDomainClass.collection.DB.getCollection(collectionName)

c1 а также c2 иметь один и тот же класс, но вести себя по-разному!

И то и другое c1 а также c2 иметь класс com.mongodb.DBApiLayer$MyCollection но они ведут себя по-разному.

В частности, c1 поддерживает "дружественные" взаимодействия, такие как передача карт непосредственно в методы GMongo, например

c1.find([tag:'spicy']).sort([created:1])

В то время как c2 работает только с DBObject параметры как:

c2.find(new BasicDBObject([tag:'spicy'])).sort(new BasicDBObject([created:1]))

Я предпочитаю синтаксис в #1, и я хотел бы иметь возможность использовать этот синтаксис с объектами, даже когда я не знаю коллекцию во время компиляции. Другими словами, я хочу иметь возможность динамического доступа к коллекциям (что я могу сделать с #2), но используя "дружественный" синтаксис из #1.

Мои вопросы:

  1. Как c1 а также c2 разные?
  2. Как я могу создать экземпляры коллекций, которые ведут себя как c1 когда коллекция неизвестна во время компиляции?
  3. На каком уровне стека Grails/GORM/GMongo обернуты объекты для поддержки преобразований map-to-DBObject и как это делается?

0 ответов

Другие вопросы по тегам