mongodb应该怎么获取子文档

有这样一个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操作是不是会发起另一个新的数据库查询啊?

阅读 3.1k
1 个回答

两种方法本质上是一样的,无非是你自己做还是驱动帮你做而已。从方便起见我会选择方案一。
实际工作中的考虑是尽可能避免join操作,如何避免的问题在文档中有讨论:MongoDB Data Model Design。这里没有说明使用场景,就无从具体分析了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进