过去版本的mongo-java驱动程序在DBRef对象上提供了.fetch方法。然而,3.0似乎不是这样。
我仍然可以在表中存储和检索DBRef值,但是除了在迭代查询结果时手动查询数据之外,还缺少其他方法吗?为每个返回的结果进行新的查询似乎效率很低。
发布于 2015-07-23 03:57:25
是的,它的效率很低。但是您在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()方法只是一种方便的方法。static .fetch(xxx)也是如此。
如果性能变差,你需要考虑去正规化。
顺便说一句。在next Mongo Version (3.2.x)中,针对Aggregaton框架的$lookup正在出现。
https://stackoverflow.com/questions/29885460
复制相似问题