1
$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") 
}
4

1 回答 1

1

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

因此,要加载相关记录,请遍历帖子游标并手动查询相关文档。

不要担心整个“懒惰”加载的事情,Mongo 没问题。

如果您因为各种未知情况而想减轻服务器的压力,那么您可以一直遍历您需要收集_id要使用的数组的帖子,然后在一个查询中全部取出这些类别并对其进行排序如所须。

老实说,DBRefs 并不是您认为的那样,实际上在 Mongo 中很少需要。通常ObjectId与另一行相关的就可以了。

所有 DBRefs 真正做的是提供一个对象,通过它可以更容易和更简单地获取相关记录:http://php.net/manual/en/class.mongodbref.php并且只有在你还没有的时候才真正有用知道收藏。将其视为许多相关集合的自我描述 ID。

于 2012-08-12T21:28:48.667 回答