有这样一个collection:
const UserSchema = new Schema({
name: {
type: String,
},
email: {
type: String,
},
password: {
type: String,
},
joinedRooms: [{
type: ObjectId,
ref: "Room",
}],
avatar: {
type: String,
default: "",
},
});
主要用mongoose来操作。
那么如果我想要获取joinedRooms的数据时,有两种方案:
方案一:
通过这个user的_id获取到这个user的文档,通过populate操作获取链接的room数据,这样就获取这所需要的joinedRooms的所有的详细信息了
方案二:
通过这个user的_id获取到这个user的文档,获取到joinedRooms这个数组,然后再进行一次请求,搜索Room这个collection,获取到_id在这个joinedRooms数组的所有数据,这样就获取这所需要的joinedRooms的所有的详细信息了。
哪一种方式会好一点?现实工作中时怎么考虑的?
另外其实populate操作是不是会发起另一个新的数据库查询啊?
两种方法本质上是一样的,无非是你自己做还是驱动帮你做而已。从方便起见我会选择方案一。
实际工作中的考虑是尽可能避免
join
操作,如何避免的问题在文档中有讨论:MongoDB Data Model Design。这里没有说明使用场景,就无从具体分析了。