前几日,实现了两中mongodb的基础工具,一种是基于MongoClient实现的,一种是基于MongoDB\Driver\Manager 实现的,发现其中的差别还是挺大的。
一、按照时间查询时格式不一样
传统的MongoClient查询,在基于时间查询过滤时 ,array(“timestamp” => array(‘$lt’ => $start)
$start = new MongoDate(strtotime(“2018-09-01 00:00:00”));
而基于 MongoDB\Driver\Query实现的查询,
$start = new MongoDB\BSON\UTCDateTime(strtotime(“2018-09-01 00:00:00”) * 1000);
二、获取结果时
传统的MongoClient查询,返回的游标,需要通过自定义循环获取结果,例如:
while($cursor->hasNext()){
$result[] = $cursor->getNext();
}
而通过 MongoDB\Driver\Query返回的游标,可以直接调用$cursor->toArray()方法返回数组
三、排序问题
一个mongodb排序的问题:
如果有多字段排序时,语法是soft:{“key1”: 1, “key2”: 1}
虽说是个map对象,但原生的语法这样会优先排key1。
如果用gorm的bson.M{“key1”: 1, “key2”:2} 有可能因为map无序特点会优先排key2。
如果在gorm里想优先排key1要用bson.D,写法这样: bson.D{bson.E{“key1”, 1}, bson.E{“key2”, 1}}
还有排序的内存限制32M问题,可以使用 allowDiskUse 参数,就会用磁盘缓存中间结果