嗯,你想用 SQL 的方式来做:
foreach($mongoIdArray as $seprateIds){
$newMongoString .= new MongoId($seprateIds).', ';
}
$mongoIdArray = explode(',', $newMongoString).'0';
而是尝试:
$_ids = array();
foreach($mongoIdArray as $seprateIds){
$_ids[] = $serprateIds instanceof MongoId ? $seprateIds : new MongoId($seprateIds);
}
$thisSearch = $collection->find(array(
'relatedMongoID' => array( '$in' => $_ids)
));
这应该产生一个ObjectId可用于搜索该字段的 s 列表 - relatedMongoID。
这就是我正在做的
基本上,如文档(https://docs.mongodb.org/v3.0/reference/operator/query/in/)中所示$in,MongoDB 的运算符实际上需要一个数组,因此您需要在 PHP 中复制此结构,因为PHP 驱动程序是 1-1 与大多数方面的文档(在某些需要使用附加对象的区域除外,例如MongoRegex:)
现在,_idMongoDB 中的所有 s 实际上都是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);
}
我这里使用了一个三元运算符来查看该值是否已经是一个MongoId封装的值,如果没有封装它。
然后我将这个新数组添加到查询对象以形成$in查询数组,如主要 MongoDB 文档中所示:
$thisSearch = $collection->find(array(
'relatedMongoID' => array( '$in' => $_ids)
));
所以现在当查询被发送到服务器时,它形成了一个类似于:
{relatedMongoId: {$in: [ObjectId(''), ObjectId('')]}}
这将返回结果。