与 Sails 和 MONGO 建立关系建模的最佳实践是什么?



我有这种情况,我想知道在对数据建模时,这里的最佳实践是什么。

我正在使用 Sails 和 Mongo,但我无法从文档中完全判断该怎么做。

我有用户,用户可以创建供应商,

供应商可以创建页面,页面有模板。

我的问题是,当我创建用户时,我应该使用供应商 ID 填充供应商数组,还是应该只依赖供应商集合中的用户 ID 引用。同样的逻辑进一步遵循 - 我的供应商页面应该存储在供应商对象的页面数组中,还是简单地作为页面对象的供应商字段。

当我使用猫鼬时,我遇到了同样的困境,文档也没有说得太清楚:http://mongoosejs.com/docs/populate.html 参见"儿童参考文献">

但是,我们可能会发现,如果我们使用 aaron 对象,我们无法得到 故事列表。这是因为从来没有故事对象 "推"到亚伦的故事上。

这里有两种观点。首先,很高兴让亚伦知道 哪些故事是他的。

aaron.stories.push(story1);
aaron.save(callback);
Person.findOne({ name: 'Aaron' }) .populate('stories') // only works
if we pushed refs to children .exec(function (err, person) {   if
(err) return handleError(err);   console.log(person); })
值得

商榷的是,我们是否真的想要两组指针 不同步。相反,我们可以跳过填充并直接查找(( 我们感兴趣的故事。

Story
.find({ _creator: aaron._id })
.exec(function (err, stories) {
  if (err) return handleError(err);
  console.log('The stories are an array: ', stories);
})

所以这就是猫鼬所说的,我不太清楚如何进行。

任何帮助将不胜感激。

我不是MongoDB专家,但我同意第二种说法,在您的情况下,只需在供应商模型中引用用户ID即可,与供应商和页面相同。

不过,这确实取决于您的用例,您是否经常遇到有用户并且需要找到该用户创建的所有供应商的情况?在这种情况下,时间重要吗?因为用户 id 解决方案会更慢(没有缓存(,但如前所述,您不必担心数据完整性,并且将使用更少的空间。

希望有帮助。

相关内容

最新更新