场景:前端给后端发送了一个数组,数组的大小不限制,有可能非常小,有可能非常大。数组的每个项是一个id。后端收到这个数组后,需要从mongodb数据库中获取每个id的详情信息并返回给前端。 请问怎么样从mongodb去查询数据好一些呢?遍历那个数组,在遍历的过程中去数据库吗。这样应该不是很好的解决办法吧?
根据前端传的一维数组拆成二维数组并发查询,然后拼接结果。
例如:前端传[‘id1’, ‘id2’, ‘id3’, ‘id4’, ‘id5’], 拆成 [[‘id1’, ‘id2’], [‘id3’, ‘id4’], [‘id5’]]
然后分3个查询,并发进行,使用$in,最后合并结果返回给前端。
@blackmatch 这样会容易让连接数爆满吧,存在风险
@TimLiu1 是的,这是一个拆的思路,代价是连接变多,查询次数变多。如果说$in 匹配的数量没有限制又不存在性能问题,直接就一次查询就好了。
@blackmatch 确实可以作为考虑之一,那其实我想问 @WUSO01 你遇到的问题是什么,我感觉你是不会用$in查询,否则任何情况都不该循环的
直接 in 被,都是 id 时间复杂度很低的。 id 是有索引
@TimLiu1 场景:前端把全国的三级城市(区/县)的城市id通过数组传递给我,约莫三千的样子,然后我要去表里面把这三千个城市的数据全部返回前端。 当时确实不会用$in
查询符。 那请问这样的情况,用$in
操作符没有什么问题吗?
@WUSO01 数量级太低了,不需要考虑性能,先把语法熟悉
@WUSO01 3000多个城市呀,不用查了,把城市一级的都返给前端好了。基本不会多几个。