给定一个Mongo集合,其中数据的格式如下:
// 'Entities'
{ tags: [{ a: '1', b: '1' }, { a: '2', b: '3' }] }
{ tags: [{ a: '1', b: '2' }, { a: '2', b: '3' }] }
{ tags: [{ a: '4', b: '4' }, { a: '4', b: '5' }, { a: '6', b: '7' }] }
我希望找到所有 'tag' 条目包含以下任何对象的文档:
[{ a: '1', b: '1' }, { a: '4', b: '4' }]
使用示例数据,这将匹配第一个和第三个元素:
{ tags: [{ a: '1', b: '1' }, { a: '2', b: '3' }] }
{ tags: [{ a: '4', b: '4' }, { a: '4', b: '5' }, { a: '6', b: '7' }] }
目前我是通过生成的查询(JS)来执行此操作:
entities.find({
$or: tags.map(tag => ({
tags: { $elemMatch: tag },
})
})
但这种方法效率非常低下,如果我要搜索的标签数量很多,那么我基本上将运行数百个单独的查询。有更好的方法吗?