什么是建模与风帆和蒙戈关系的最佳实践

时间:2014-12-08 06:41:52

标签: mongodb sails.js

我有这种情况,我想知道在建模数据时最好的做法是什么。

我使用的是Sails和Mongo,我无法从文档中了解该怎么做。

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

我的问题是,当我创建用户时,我应该使用供应商ID填充供应商阵列,还是应该只依赖供应商集合中的用户ID引用。进一步遵循相同的逻辑 - 如果我的供应商'页面存储在供应商对象中的页面数组中,或者仅存储在页面对象中的供应商字段中。

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

  

然而,我们可能会发现,如果我们使用aaron对象,我们就无法得到   故事列表。这是因为没有任何故事对象   '推'到aaron.stories。

     

这里有两个观点。首先,让亚伦知道真好   哪些故事是他的。

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);
})

所以这就是Mongoose所说的,我不太清楚如何继续。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我不是MongoDB专家,但我同意第二个声明,在您的情况下,在供应商模型中只有用户ID引用,并且与供应商和页面相同。

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

希望有所帮助。