在mongo-java 3中自动获取DBRef

时间:2015-04-27 00:47:50

标签: java mongodb

过去版本的mongo-java驱动程序在.fetch个对象上提供了DBRef方法。但似乎3.0没有。

我仍然可以使用表格存储和检索DBRef值,但是在迭代查询结果的同时手动查询该数据,是否还有其他方法我不知道?为每个返回的结果创建一个新查询似乎效率低下。

1 个答案:

答案 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正在为聚合框架提供。