MongoDB在_id php中搜索$

Sil*_*las 0 php mongodb

通常当我搜索一个相关的ID时,我这样做:

$thisSearch = $collection->find(array(
    'relatedMongoID' => new MongoId($mongoIDfromSomewhereElse)
));
Run Code Online (Sandbox Code Playgroud)

如果我想做这样的事情我该怎么做:

$mongoIdArray = array($mongoIDfromSomewhereElseOne, $mongoIDfromSomewhereElseTwo, $mongoIDfromSomewhereElseThree);
$thisSearch = $collection->find(array(
        'relatedMongoID' => array( '$in' => new MongoId(mongoIdArray)
    )));
Run Code Online (Sandbox Code Playgroud)

我已经尝试了有没有新的MongoId(),我甚至尝试过没有运气.

foreach($mongoIdArray as $seprateIds){

$newMongoString .= new MongoId($seprateIds).', ';

}
$mongoIdArray = explode(',', $newMongoString).'0';
Run Code Online (Sandbox Code Playgroud)

当你需要在每个_id上运行新的MongoID()时,如何搜索'$ in'"_ id"?

Sam*_*aye 8

嗯你的rtying以SQL方式做到这一点:

foreach($mongoIdArray as $seprateIds){

$newMongoString .= new MongoId($seprateIds).', ';

}
$mongoIdArray = explode(',', $newMongoString).'0';
Run Code Online (Sandbox Code Playgroud)

而是尝试:

$_ids = array();
foreach($mongoIdArray as $seprateIds){
    $_ids[] = $serprateIds instanceof MongoId ? $seprateIds : new MongoId($seprateIds);
}
$thisSearch = $collection->find(array(
    'relatedMongoID' => array( '$in' => $_ids)
));
Run Code Online (Sandbox Code Playgroud)

这应该产生一个ObjectId可用于搜索该字段的s 列表- relatedMongoID.

这就是我在做的事情

基本上,如文档(https://docs.mongodb.org/v3.0/reference/operator/query/in/)所示,$inMongoDB 的运算符实际上是一个数组,所以你需要在PHP中复制这个结构PHP的司机是1-1与最前沿的文件(除非在你需要使用一个额外的对象,比如有些地区:MongoRegex)

现在,_idMongoDB中的所有内容实际上都是ObjectIds(除非你改变了结构),所以你需要做的就是创建一个ObjectIds 数组.在ObjectIdPHP中是MongoId(http://php.net/manual/en/class.mongoid.php)

所以你需要制作一个MongoIds 数组.

首先,我遍历数组(可以完成array_walk)将每个数组元素的值更改为a,MongoId并使用封装在该对象中的旧值:

foreach($mongoIdArray as $seprateIds){
    $_ids[] = $serprateIds instanceof MongoId ? $seprateIds : new MongoId($seprateIds);
}
Run Code Online (Sandbox Code Playgroud)

我在这里使用三元运算符来查看该值是否已经是MongoId封装值,如果没有封装它.

然后我将这个新数组添加到查询对象中以形成$in查询数组,如MongoDB主文档中所示:

$thisSearch = $collection->find(array(
    'relatedMongoID' => array( '$in' => $_ids)
));
Run Code Online (Sandbox Code Playgroud)

所以现在当查询被发送到服务器时,它形成类似于以下的结构:

{relatedMongoId: {$in: [ObjectId(''), ObjectId('')]}}
Run Code Online (Sandbox Code Playgroud)

哪个会返回结果.