我正在使用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中的“友好”语法。
c1
和c2
有何不同? c1
的集合?