- 关于云开发数据库 嵌套数组的聚合查询问题
Store 文档结构是这样的 { _id: "store01", orderHistory:[ 'order01', 'order02', 'order03' ] } Order 文档结构 { _id:'order01', products:[ {id:'item01', quantity:20}, {id:'item02', quantity:10}, {id:'item03', quantity:20}, {id:'item04', quantity:5}, ], buyer:'uid02' }, { _id:'order02', products:[ {id:'item02', quantity:10}, {id:'item03', quantity:20}, ], buyer:'uid01' } Item 文档结构 { _id:'item01', name:'菠萝' }, { _id:'item02', name:'芒果' }, { _id:'item03', name:'西瓜' }, { _id:'item04', name:'番茄' } User文档结构 { _id:'uid01', name:'user Bob', }, { _id:'uid02', name:'Alice', } 问题: 我现在想将 Store 的orderHsttoryId映射成具体的文档。 而这些文档内,又会有 ItemId组成的数组和userId, 我想把这些也查询出来形成类似这样的结构(可以有不一样,如果有更好的方式也欢迎指出来)是否能用一个聚合把这些Id全部映射成具体的文档呢? { _id: "store01", orderHistory:[ { _id:'order01', products:[ { item:{_id:'item01',name:'菠萝'}, quantity:20 }, { item:{id:'item02',name:'芒果'}, quantity:10 }, { item:{id:'item03',name:'西瓜'}, quantity:10 }, { item:{id:'item04',name:'番茄'}, quantity:5 }, ], buyer:{ _id:'user02' name:'Alice' } }, { _id:'order02', products:[ ... ], buyer:... }, ... ..., ] }
2020-09-17 - 云开发中数据库 读写次数的计算规则(免费版5万读写那个限制)到底是怎么算的?
比如我有两个表 一个是详细物件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,数据库读写次数又是几次?
2020-09-14