mongodb在php中查找函数


mongo db find function in php

我正在mongodb建立一个社交网络。下面是groups集合中的文档结构。它代表了系统中存在的每个社会群体。用户是这个组的一部分,这个组由'members'属性表示,这是一个json对象数组。

{
  "group_name":"my group",
  "members": [
    {
      "user_id": ObjectId("4e29341986ba75dc14000000"),
      "joined": ISODate("2011-07-26T11:46:49.0Z")
    },
    {
      "user_id": ObjectId("4e2ea94286ba75f81500000e"),
      "joined": ISODate("2011-07-26T11:47:55.0Z")
    },
    {
      "user_id": ObjectId("4e2eaa0786ba75e815000003"),
      "joined": ISODate("2011-07-26T11:55:22.0Z")
    },
    {
      "user_id": ObjectId("4e2eab7f86ba75ec1500000a"),
      "joined": ISODate("2011-07-26T11:57:44.0Z")
    },
    {
      "user_id": ObjectId("4e2eac3586ba75dc15000000"),
      "joined": ISODate("2011-07-26T12:00:57.0Z")
    },
    {
      "user_id": ObjectId("4e2eacae86ba75dc15000004"),
      "joined": ISODate("2011-07-26T12:02:43.0Z")
    },
    {
      "user_id": ObjectId("4e2eadbb86ba75ec1500000c"),
      "joined": ISODate("2011-07-26T12:07:01.0Z")
    }
  ]

我面临的问题是如何检查用户是否属于某个组。这是我想到的,但它似乎不起作用。请帮助。

    $criteria = array(
        '_id' => new MongoId($group_id),
        'members' => array('user_id' => new MongoId($user_id))
    );

   return $collection->find($criteria);

试试下面的代码:

$criteria = array(
        '_id' => new MongoId($group_id),
        'members.user_id' => new MongoId($user_id))
    );

return $collection->find($criteria);

见http://www.mongodb.org/display/DOCS/Dot +符号+ %达到28 +到+对象% 29日

使用$elemMatch运算符

在Mongo shell中,你可以这样做:

> criteria = { 
...   "_id" : ObjectId("group_id"), 
...   "members" : {
...      $elemMatch : {
...         "user_id" : ObjectId("user_id")
...      }
...   }
...}
> db.groups.find(criteria);

它将在groups集合中搜索members对象的user_idObjectId("user_id")的条目。

还没有在PHP中测试过,但由于结构相同,应该这样做:

$criteria = array(
    '_id' => new MongoId($group_id),
    'members' => array(
       '$elemMatch' => array(
           'user_id' => new MongoId($user_id)
       )
    )
);
return $collection->find($criteria);

提示:完全删除_id子句,您可以找出用户属于哪个组(而不是分别查询每个组)。