通常当我搜索一个相关的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"?
嗯你的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)
哪个会返回结果.
| 归档时间: |
|
| 查看次数: |
2216 次 |
| 最近记录: |