13

我需要一种搜索​​方法,但不包括已经在用户面前的屏幕上的 _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))));

但是,这只会阻止整个事情的运行。

4

2 回答 2

27

您需要做一个$ne(不等于)以确保您正在查看的当前宠物被排除在所有者的搜索之外。

mongo外壳中的示例:

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

db.mypet.find(
    {
        _id: { $ne: viewingPetId },
        owner: ownerId
    }
)
于 2013-04-13T15:36:06.550 回答
8

使用$neas (注意不需要使用ObjectId(),字符串会自动转换为ObjectId):

db.organizations.find({"_id" : {$ne:"563c50e05cdb2be30391e873"}})
于 2015-11-06T14:01:38.183 回答