【发布时间】:2018-05-03 16:22:11
【问题描述】:
我正在开发一个用户可以发布多个帖子的项目。
所以我想知道哪种方法更适合查询他的所有帖子
在包含所有帖子 ID 的用户模型中有一个帖子字段,然后在包含所有用户的所有帖子的帖子集合中通过
FindById搜索每个字段一次查询所有帖子集合并查找给定用户的所有帖子
【问题讨论】:
标签: database mongodb mongoose mongodb-query
我正在开发一个用户可以发布多个帖子的项目。
所以我想知道哪种方法更适合查询他的所有帖子
在包含所有帖子 ID 的用户模型中有一个帖子字段,然后在包含所有用户的所有帖子的帖子集合中通过 FindById 搜索每个字段
一次查询所有帖子集合并查找给定用户的所有帖子
【问题讨论】:
标签: database mongodb mongoose mongodb-query
我将尝试回答标题中的问题以及您的具体用例,从标题开始。
在您的用例上下文之外,如果提供 valid ObjectIds,findOne 的速度可能会微不足道,因为通过 .findOne({ _id }) 传递无效 ID 并不能确保 _id 是一个有效的 ObjectId。
但是,如果 ID 格式不正确,.findById(_id) 将阻止查询
执行任何操作并实际抛出CastError,它
如果您不确定 ID 的来源,性能会更好,
例如用户输入,如果您想提供错误消息而不是空结果,还有额外的好处。
如前所述,这些细节似乎与您的用例无关,因为有问题的 ObjectId 已经存储在数据库中,更不用说这似乎是一个问题,即理论上什么查询会更快,而不是一个查询助手优于其他。
Posts.find({ userId })
Post 和 User 模型的一个(未经测试的)示例可能是:User
.findOne({ foo: 'bar' })
.populate('posts')
.select('-id posts')
这应该返回一个带有单个键 posts 的对象,其中包含一个帖子数组。
【讨论】: