我需要一种搜索方式,但不包括已经在用户面前的屏幕上的_id。例如,我有3个宠物档案,其中一个用户已经在查看。
在该页面上,我有一个名为My Family的标题。然后我运行此搜索:
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))));
然而,这只会阻止整个事情的运行。
答案 0 :(得分:16)
您需要执行$ne
(not equal)以确保您所查看的当前宠物被所有者排除在搜索范围之外。
mongo
shell中的示例:
var viewingPetId = ObjectId("515535b6760fe8735f5f6899");
var ownerId = ObjectId("515535ba760fe8735f5f689a");
db.mypet.find(
{
_id: { $ne: viewingPetId },
owner: ownerId
}
)
答案 1 :(得分:7)
使用$ne
为(通知无需使用ObjectId()
,字符串将自动加密到ObjectId
):
db.organizations.find({"_id" : {$ne:"563c50e05cdb2be30391e873"}})