我使用Monger作为驱动程序在MongoDB数据库的Clojure上编写Web后端。
我真的很喜欢Monger,但是我错过了一个我发现在Mongoose驱动程序中非常有用的功能:populate
方法使我能够在查询中模拟基本连接。
有点像这样:
MyModel.find()
.populate("myExternalKey")// put the name of the key to populate; Mongoose knows in which collection to look, because you have registered this property as a Ref
.exec();
所以第一个问题: Monger或Clojure有什么类似的东西吗?
我没有找到,所以假设答案是否定的,这就是我打算做的事情。
我正在考虑使用名为my-populate
的Clojure实用程序函数,其用法如下:
(my-populate mydoc
{:key1 "aCollectionName"
:key2 {:key3 "anotherCollectionName"
:key4 "yetAnotherCollName"}})
其中mydoc
是表示MongoDB文档的地图,其中包含对路径(:key1)
,(:key2 :key3)
和(:key2 :key4)
中其他集合的外部引用,并且调用my-populate
会返回填充的文档(好吧,更有可能是一个包含它的core.async
频道来说实话。)
我这样做的策略只是为每个字段进行一次查询,这并不难,但现在我关注性能方面的考虑。
我应该担心此策略的性能问题吗?是否有一些MongoDB高级功能可以帮助它?
也许有人知道Mongoose的populate
在幕后所做的事情可以给我一些见解。