在Laravel5框架中,使用这个扩展 jenssegers/mongodb 操作 MongoDB 会很方便,下载地址如下:

https://packagist.org/packages/jenssegers/mongodb

这个扩展虽然方便,但是有很多功能高级查询或者聚合的功能,文档中没有说明,或者是不支持。昨天我就遇到了一个实际支持,但是文档中没有说明的操作,这些操作需要大家去看代码发现。

先介绍一下我抽象之后的文档结构:

{
"id": 100,
"name": "张无忌",
"age": 25,
"relations": [{
"id": 1,
"name": "张三丰",
"age": 60
}, {
"id": 105,
"name": "赵敏",
"age": 23
}]
}

这个文档存储的内容是一个用户信息,其中 relations 是这个用户的关系人信息,我希望从文档中查出 relations 下 id=1 的文档。

如果使用原生的 MongoDB 查询方式应该这样写:

db.user.find({relations:{$elemMatch:{id:1}}})

但是我们在 Laravel5 框架中,应该这样写:

UserModel::where('relations','elemmatch',['id'=>1])->get();

上面这种写法的 elemmatch 操作符在 jenssegers/mongodb 文档中并没有说明,需要大家去发现。

另外需要注意一点,MongoDB 中数据类型是严格的,比如上面的 id 是数字型,我们使用 ['id'=>‘1’] 字符串型数字是查不到相应结果的,这点需要大家在数据入库和查询的时候特别留意。

本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/30