【问题标题】:Why Mongoose saves references of child ids in parent model?为什么 Mongoose 在父模型中保存子 ID 的引用?
【发布时间】:2014-10-28 23:47:31
【问题描述】:

我正在尝试使用 MongoDB 和 Node.js,发现最推荐使用的模块是 Mongoose。我喜欢创建像 mysql 这样的架构的想法,而且它非常易于使用。

我不明白的一点是关于引用。

var SessionSchema = new Schema({
    created: { type: Date, default: Date.now },
    updated: { type: Date, default: Date.now },
    client: { type: String, required: true },
    events: [{ type: Schema.Types.ObjectId, ref: 'Event', required: true }]
});


var EventSchema = new Schema({
    created: { type: Date, default: Date.now },
    session: { type: Schema.Types.ObjectId, ref: 'Session', childPath: 'events', required: true },
    data: Schema.Types.Mixed
});

现在有一个问题 - 为什么我需要从会话内部引用事件 ID?为什么不只查询 eventsModel.find({session: session._id})?

恐怕它会创建巨大的会话文档,因为一个会话甚至可以有数百个事件。

我在这里错过了什么?

【问题讨论】:

  • 这是您的架构,还是您引用了执行此操作的文档或教程?
  • 这只是架构中的一些列。为什么要问?

标签: node.js mongodb mongoose


【解决方案1】:

这取决于,通常常见的路径是制作这些参考以供以后使用参考数据填充您的查询,正如我从人口文档中提取的那样:

MongoDB 中没有连接,但有时我们仍然需要引用 到其他集合中的文档。这就是人口的来源。

如果你对人口感兴趣,你会达到一个高峰here

您可以手动执行此操作,这取决于您的需求和查询。

【讨论】:

  • 很公平。我认为这可能是一个比仅查询“eventsModel.find({session: session._id})”更好的实现(就像我在 mysql 中所做的那样)
猜你喜欢
  • 2018-05-31
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 2017-06-02
  • 2022-08-17
相关资源
最近更新 更多