给定一个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 },
})
})
但是这看起来效率很低,因为如果我搜索的标签数量很大,我将基本上运行数百个单独的查询。有更好的方法吗?
2条答案
按热度按时间piok6c0g1#
看起来你可以使用
$in
操作符来代替,这应该会在大规模上给予更好的性能(和更干净的代码)。Mongo Playground
x4shl7ld2#
也许嵌套了
$or
。(我不确定您的数据的形状,但显然
tags
是approvers
的一个属性?)mongoplayground