【发布时间】:2020-06-09 21:11:04
【问题描述】:
我目前使用的是 MongoDB 3.5,我有两个集合(用户、项目)。每个用户都有一个项目列表
//users
{
_id: ObjectId('userObjId1')
itemArray: [
{ ObjectId('itemA'), specialId: '123-this-is-unique'},
{ ObjectId('itemB'), specialId: '456-this-is-unique'},
{ ObjectId('itemC'),specialId: '789-this-is-unique'},
]
}
和物品
//items
{
_id: ObjectId('itemA')
specialId: '123this-is-unique'
owner: ObjectId('userObjId1')
}
我的一个操作涉及查询用户,给定一个 specialIds 数组
在我的项目集合中,项目的specialIds 已编入索引。
哪一个是更好的做法(并且可能会有更好的性能)?
A) 使用$in 运算符查询用户集合中specialIds 的数组。
优点:查询保持在同一个集合中
缺点:每个用户中的 itemArray 本身没有被索引,据我了解这可能会影响性能
B) 在 items 集合中查询,投影 owner 并使用它在 users 集合中运行 $lookup
优点:较新的 sytanx,因为 specialIds 已经在 items 集合中被索引,它应该是更好的性能。
缺点:需要在一个查询中访问两个集合
【问题讨论】:
标签: database mongodb performance aggregation-framework