Php Mongodb$的返回顺序不正确
我有疑问Php Mongodb$的返回顺序不正确,php,mongodb,Php,Mongodb,我有疑问 $cursor = $collection->find(array('id' =>array('$in'=>array(4,3,2,1))), array('name')); foreach($cursor as $fild) { echo $fild['name'].'<br>'; } 如果我改变数组的顺序,比如(3,2,4,1)。 返
$cursor = $collection->find(array('id' =>array('$in'=>array(4,3,2,1))), array('name'));
foreach($cursor as $fild)
{
echo $fild['name'].'<br>';
}
如果我改变数组的顺序,比如(3,2,4,1)。
返回
必须返回
Fifa 2014
Pro Evolution Soccer 2014
Star Craft 2
Need for speed: Most Wanted
我做错了什么?本质上,这不是操作符的工作方式,对于MongoDB或任何数据库中的任何等效形式。因此,在结果中,您输入参数的顺序并不像您期望的那样得到维护 然而,为了实现这一点,您可以采取几种方法。第一种是通过创造性地使用聚合管道:
var选择=[4,2,3,1];
db.collection.aggregate([
//$match类似于标准的“查找”查询
{“$match”:{
“id”:{“$in”:选择数}
}},
//投影字段和排序字段
{“$project”:{
“_id”:0,
“名称”:1,
“订单”:{“$cond”:[
{“$eq”:[“$id”,4]},
1.
{“$cond”:[
{“$eq”:[“$id”,2]},
2.
{“$cond”:[
{“$eq”:[“$id”,3]},
3.
4.
]}
]}
]}
}},
//在生成的字段上排序
{“$sort”:{“order”:}
])
因此,通过使用运算符a,可以计算id
的当前值,以确定要分配的排序顺序。当然,您实际上会在代码中为此条件生成管道内容,使用类似于的方法
当然,如果这看起来有点太复杂,即使你最好这样做,那么你也可以使用mapReduce来解决这个问题。但由于它在解释器中使用JavaScript代码,并且不像使用本机代码那样使用本机代码,因此运行速度会变慢:
var选择=[4,2,3,1];
db.collection.mapReduce(
函数(){
散发(
selections.indexOf(this.id),
这个名字
);
},
函数(){},
{
“查询”:{“id”:{“$in”:selections},
“范围”:{“选择”:选择},
“out”:{“inline”:1}
}
)
这种方法利用了mapReduce如何对映射器中发出的键值进行排序,因此通过在数组中定位索引值,可以保持排序顺序
因此,这为您提供了两种方法,您可以使用这些方法“动态”从数组中的参数顺序生成排序顺序。您永远不会排序…?您不能按$in
$in
排序,因为$in不能保证响应顺序。您需要在另一个字段上排序,或者在PHP代码中排序。
Need for speed: Most Wanted
Pro Evolution Soccer 2014
Fifa 2014
Star Craft 2
Fifa 2014
Pro Evolution Soccer 2014
Star Craft 2
Need for speed: Most Wanted