我在使用此设计构建一些简单查询时遇到问题。问题很简单我希望获得包含用户信息的帖子,这些信息应该都在一个数组中,所以我可以将它传递给快速视图。
简单而且对我来说,似乎错误的解决方案是在找到所有posts(db.post.find({email:'mo@gmail.com'})
之后然后循环遍历帖子并使用户集合查找查询然后合并结果。
其他解决方案是使用链接作者的DBref这可能会更好,但我还没有找到如何进行查询。
// User, the profile is not complete there will be more fields
var u = {
name: 'Michael', // Is not unique
email: 'mo@gmail.com', // Should be also unique
fbid: '4545454asdadsa'
}
db.user.insert(u);
// User can have 0 to many posts
var p = {
title: 'Suprise',
body: 'Well done',
tags: ['first', 'post', 'english'],
author: 'mo@gmail.com',
created: new Date(),
modified: new Date()
};
db.post.insert(p);
var p = {
title: 'Weather in Estonia',
body: 'Always looks bad',
tags: ['bad', 'weather', 'estonia'],
author: 'mo@gmail.com',
created: new Date(),
modified: new Date()
}
db.post.insert(p);
答案 0 :(得分:2)
var p = {
title: 'Suprise',
body: 'Well done',
tags: ['first', 'post', 'english'],
author: {
name: 'Michael', // Is not unique
email: 'mo@gmail.com', // Should be also unique
fbid: '4545454asdadsa'
},
created: new Date(),
modified: new Date()
};
您嵌入了文档,您进行了非规范化。这是它的工作原理。现在你可以获得所有帖子,而不必查询用户,因为他们已经在那里。
我将说明如何做到这一点。我完全偏离了非规范化。这意味着你永远不需要加入。请注意,如果它只是残留而且从不需要,可以删除其中的一部分。
{
title: String,
body: String,
tags: [String],
author: {
name: String,
email: String,
fbid: String
},
created: Date,
modified: Date,
comments: [{
body: String,
created: Date,
modified: Date
}]
}
{
name: String,
email: String,
fbid: String,
posts: [{
title: String,
body: String,
tags: [String],
created: Date,
modified: Date,
comments: [{
body: String,
created: Date,
modified: Date
}]
}]
}
{
body: String,
created: Date,
modified: Date,
author: {
name: String,
email: String,
fbid: String
},
post: {
title: String,
body: String,
tags: [String],
created: Date,
modified: Date
comments: [{
body: String,
created: Date,
modified: Date
}]
}
}