我有这种情况,我想知道在建模数据时最好的做法是什么。
我使用的是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所说的,我不太清楚如何继续。
非常感谢任何帮助。
答案 0 :(得分:1)
我不是MongoDB专家,但我同意第二个声明,在您的情况下,在供应商模型中只有用户ID引用,并且与供应商和页面相同。
它确实取决于您的用例,您是否经常遇到有用户的情况,并且您需要找到用户创建的所有供应商?在这种情况下时间重要吗?因为用户ID解决方案会慢一点(没有缓存),但如上所述,您不必担心数据完整性,并且您将占用更少的空间。
希望有所帮助。