给出db ref的急切加载

时间:2012-08-12 19:30:55

标签: php mongodb mongodb-php

$posts = $collection->find();

我应该如何热切地加载每个帖子被引用的类别?

//1 Document from $posts
{
   "_id": ObjectId("502803b6d4ebdfd805000032"),
   "title": "abcd",
   "message": "abc",
   "category": {
     "$ref": "categories",
     "$id": ObjectId("5027e15dd4ebdfd80500001e") 
  }
}

//the document in categories referenced from the post above
{
   "_id": ObjectId("5027e15dd4ebdfd80500001e"),
   "name": "miscellaneous",
   "slug": "miscellaneous",
   "description": "",
   "created_at": ISODate("2012-08-12T17: 01: 17.0Z"),
   "updated_at": ISODate("2012-08-12T19: 27: 50.0Z") 
}

1 个答案:

答案 0 :(得分:1)

Mongo没有服务器端“急切”加载。

因此,加载相关记录迭代post cursor并手动查询相关文档。

不要担心整个“懒惰”装载的东西,对Mongo来说很好。

如果你因为各种未知情况而想要消除服务器上的压力,那么你可以在需要收集_id数组的帖子中一直迭代,然后在一个查询中使用将这些类别退出并根据需要对其进行排序。

如果我是诚实的,DBRef不是你认为的那样,而且在Mongo中实际上很少需要。通常,与另一行相关的ObjectId也可以。

所有DBRef确实提供了一个对象,通过该对象可以更容易,更简单地获取相关记录:http://php.net/manual/en/class.mongodbref.php,并且只有在您还不知道集合时才真正有用。可以将其视为许多相关集合的自描述ID。