我需要一种搜索​​方法,但不包括已在用户前面的屏幕上显示的_id。例如,我有3个宠物资料,其中一个用户已经在查看。

在该页面上,我有一个标题为“我的家人”。然后,我运行此搜索:

public function fetch_family($owner)
    {
        $collection = static::db()->mypet;
        $cursor = $collection->find(array('owner' => new MongoId($owner)));

        if ($cursor->count() > 0)
            {
                $family = array();
                // iterate through the results
                while( $cursor->hasNext() ) {
                    $family[] = ($cursor->getNext());
                }
                return $family;
            }
    }


它甚至还知道我已经在展示一只宠物,就把我家里的所有宠物都还了。所以我想从搜索中排除一个_id。

我以为是这样

$cursor = $collection->find(array('owner' => new MongoId($owner), '$not'=>array('_id'=>new MongoId(INSERT ID HERE))));


但是,这只是阻止了整个事情的进行。

最佳答案

您需要执行$ne (not equal)以确保所有者正在搜索的对象中不包括您正在查看的当前宠物。

mongo shell中的示例:

var viewingPetId = ObjectId("515535b6760fe8735f5f6899");
var ownerId = ObjectId("515535ba760fe8735f5f689a");

db.mypet.find(
    {
        _id: { $ne: viewingPetId },
        owner: ownerId
    }
)

08-18 11:46