如何使用“外键”数组填充mongo对象?

时间:2015-04-22 02:03:41

标签: javascript node.js mongodb denormalization nosql

所以我有一个Channel模型和一个Subscriber模型。

频道的属性包含与已注册的订阅者相对应的ID数组。

我一直坐在这里用async将我的头骨贴在墙上:

  1. 获取频道列表,然后在该回调结束时
  2. 从该频道获取订阅者ID列表,然后在该回调结束时
  3. 再次使用async,为每个订阅者ID运行mongoDB查询以阻止用户配置文件并修改初始通道列表
  4. 这似乎非常错误。 Subscriber是否应将频道内的LIVE作为嵌入文档?如果是这种情况,那么当用户需要登录时,我是否必须在所有频道及其所有嵌入文档中进行搜索?

    如果我想将它们分开保存怎么办 - 比如我想与用户,投标人以及我认为不属于嵌入式文档的其他实体一起做什么?

    PS:我不想使用Mongoose。

    有更简单的方法吗?

    提前致谢。

1 个答案:

答案 0 :(得分:0)

对于这种特殊情况,您可以进行$ in查询。您拥有给定频道的subscriberID数组,因此您可以对订阅者/用户集合进行$ in查询。

db.subscribers.find({userID:{$in: IDsArray}})

但总的来说,使用Mongo,您必须通过应用层手动执行这些连接。如果您不打算在其他地方起诉他们,您也可以将订阅者嵌入到频道文档中。 或者你可以切换到关系数据库,如Postgres。

希望这会有所帮助,它应该消除必须遍历所有订阅者ID并对每个订阅者ID进行查找。