过去版本的mongo-java驱动程序在.fetch
个对象上提供了DBRef
方法。但似乎3.0没有。
我仍然可以使用表格存储和检索DBRef
值,但是在迭代查询结果的同时手动查询该数据,是否还有其他方法我不知道?为每个返回的结果创建一个新查询似乎效率低下。
答案 0 :(得分:2)
是的,效率低下。但你在2.xx.x上完全一样。
也许它被贬低的原因是,因为它可能意味着有一些优化的东西在继续。但是,如果您检查2.13.1的驱动程序源代码,您会看到它使用.findOne(...)
/**
* Fetches the object referenced from the database
*
* @return the document that this references.
* @throws MongoException
* @deprecated use {@link com.mongodb.DBCollection#findOne(Object)} instead
*/
@Deprecated
public DBObject fetch() throws MongoException {
if (_loadedPointedTo)
return _pointedTo;
if (_db == null)
throw new MongoInternalException("no db");
final DBCollection coll = _db.getCollectionFromString(_ns);
_pointedTo = coll.findOne(_id);
_loadedPointedTo = true;
return _pointedTo;
}
证明.fetch()
方法只是一种方便的方法。
静态 .fetch(xxx)
也是如此。
如果性能变差,你需要考虑非规范化。
顺便说一下。在next Mongo Version(3.2.x)中,$lookup
正在为聚合框架提供。