MongoDB的$不_id(mongodb $not _id)

2019-07-20 08:15发布

我需要一种方法来搜索,但不包括_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))));

然而,这只是从停止运行整个事情。

Answer 1:

你需要做一个$ne (不等于) ,以确保您正在查看当前的宠物是从按所有者搜索中排除。

例如,在mongo壳:

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

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


Answer 2:

使用$ne为(注意没有必要使用ObjectId()字符串将自动施放到ObjectId ):

db.organizations.find({"_id" : {$ne:"563c50e05cdb2be30391e873"}})


文章来源: mongodb $not _id