MongoDB作为 NoSql 的数据库,能通过嵌套子文档,将横向扩展以及性能做到更好,实现一对多的关联关系。应用开发中,对嵌套子文档结构的查询,不熟悉者 MongoDB 也容易陷入误区。如有如下数据
…… { "_id": "1001", "name": "Storage Beta", "items": [ { "category": "food", "name": "pear" }, { "category": "food", "name": "peach" }, { "category": "food", "name": "grape"}, { "category": "tool", "name": "knife"}, { "category": "furniture", "name": "chair" }, { "category": "furniture", "name": "bench"} ]} …… |
查询 category='food' 的子文档,估计不少使用者首先想到用 find() 语句查询:
db.storage.find({'items.category':{ $eq: 'food'}}).pretty();
则返回上面所有的数据,并没有达到过滤数据的目的。MongoDB实现方式确实有点与众不同,需要采用aggregate+$project