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

として使用$neします ( を使用する必要がないことに注意してくださいObjectId()。文字列は に自動キャストされますObjectId):

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