我有一个大约 50tags
个数组的列表,并且想要搜索我的文档以查找与这些标签匹配的记录。
因为它们是用户提交的并且 mongoDB 区分大小写,所以我将/wildcard/i
其用作搜索的一种方式。我知道这不是最快的搜索方式,但我想不出更好的解决方案。
我可以通过两种方式进行查询。第一个是for
在我的数组上运行一个循环tags
,并对每个结果执行:
db.collection.find({tags: /<tag[x]>/i})
或者,我可以收集所有标签并使用 运行一次查找$or
,如下所示:
db.collection.find({$or:[{tags:/<tag1>/i},{tags:/<tag2>/i},{tags:/<tag3>/i}, ... {tags:/<tag50>/i}]});
我已经尝试了这两种方法,发现 using$or
明显更快 - 但由于我的应用程序的工作状态,很难判断这是因为它实际上更快还是我的应用程序是否在其他领域造成了大量开销(这是)。
所以为了澄清,在 MongoDB 中执行一次大查询比执行多次小查询快吗?
编辑:另一个例子是查找 3 个单独的记录是否_id
比使用{$or:[{_id: ObjectId([id1])},{_id: ObjectId([id2])},{_id: ObjectId([id3])}]}
. 是不是更多?