比如我有两个表 一个是详细物件Item表,另一个是商店Store表,里面包含了一个含有ItemID的数组
假设Item表的内容是这些
[
{
_id:'item01',
price: 50,
descriptions:''
},
{
_id:'item02',
price: 10,
descriptions:''
},
{
_id:'item03',
price: 90,
descriptions:''
}
]
Store表内容如下
[
{
_id:'store01',
items:['item01','item02','item03']
}
]
这时候我想查找某个店下的所有物件,我之前用的是两条查询,首先获取到
db.collection('store').where('_id':'store01')
将返回结果中的 items 作为数组使用 _in 的方式再执行另一个查询语句,这时候 items是一个数组
db.collection('item').where('_id':_.in(items))以上婴孩
以上应该是两次读取
后来研究了一下聚合查询后发现有新的方式
db.collection('store')
.aggregate()
.match({
_id:'store01'
}).
lookup({
from:'item',
let:{
itemId:'$items'
},
pipeline:$.pipeline()
.match(_.expr(
$.in(['$_id','$$itemId'])
))
.done(),
as:'items'
})
.end()
问题就是
- 这里用聚合 project, match,lookup等命令后,获得了相同结果,最后的数据库读写次数算几次?
- 假设我后面再加多个lookup,数据库读写次数又是几次?
一个聚合就是一次