Javascript 创建查询(联接)或更正设计?

Javascript 创建查询(联接)或更正设计?,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我在用这种设计构建一些简单的查询时遇到了问题。问题很简单,我想获取包含用户信息的帖子,这些信息应该都在一个数组中,这样我就可以将其传递给express view 很简单,对我来说,找到所有帖子(db.post.find({email:'mo@gmail.com“})然后循环浏览帖子,对用户集合进行一次查找查询,然后合并结果 另一个解决方案是使用DBref链接作者,这可能更好,但我还没有找到如何进行查询 // User, the profile is not complete there will

我在用这种设计构建一些简单的查询时遇到了问题。问题很简单,我想获取包含用户信息的帖子,这些信息应该都在一个数组中,这样我就可以将其传递给express view

很简单,对我来说,找到所有
帖子(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);
你嵌入文档,你去规范化。这就是它的工作原理。现在你可以得到所有的帖子,而不必查询用户,因为他们已经在那里了

数据结构 我将详细说明如何做到这一点。我对非规范化做得太过火了。这意味着您永远不需要连接。请注意,如果它只是粗糙的,并且永远不需要,可以删除其中的一些连接

帖子集 用户集合 评论集
是的,这可能是一种方法。当作者包含更多类似于7个字段时,如何解决这个问题?这不会重复代码并使集合的大小变大。此外,当作者想要更改名称时,这也需要更改所有帖子。@jurka是的,它被称为非规范化,您会使集合变大,并使查询时间变长horter,这就是你获得速度的方法。是的,当作者更改名字时,你必须在任何地方都更改它,编写正确的代码。谢谢你的回答,但是在这种情况下,嵌入文档是否仍然是最好的做法,当帖子获得评论字段并且每条评论也获得作者时。例如@jurka你可以杀死nesting,nested评论不需要“作者”字段,因为它们位于帖子内部。评论集合中的实际评论对象需要一个嵌套作者。嵌套评论不必与普通评论相同。我已经根据上一篇帖子创建了一个新的示例。您是否想过这一点。但在某些情况下,仍然存在n连接/链接的eed在NoSQL世界中是真的还是糟糕的设计?创建连接类型的一种可能方法是使用一些流控制方法,如这里所做的。
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
    }]
  }
}