給定 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' }] }
我想查找其“標簽”條目具有以下任何物件的所有檔案:
[{ 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 },
})
})
但這似乎非常低效,好像我要搜索的標簽數量很大,我基本上將運行數百個單獨的查詢。有沒有更好的辦法?
uj5u.com熱心網友回復:
看起來您可以只使用$in運算子,這應該可以大規模提供更好的性能(和更簡潔的代碼)。
db.collection.find({
approvers: {
$in: tags
}
})
蒙戈游樂場
uj5u.com熱心網友回復:
也許嵌套$or.
(我不確定您的資料的形狀,但顯然tags是approvers?)
find({
'approvers.tags': {
'$elemMatch': {
$or: [
{ a: '1', b: '1' },
{ a: '4', b: '4' }
]
}
}
});
mongoplayground
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524389.html
