Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 集合中的Mongo集合_Mongodb_Collections - Fatal编程技术网

Mongodb 集合中的Mongo集合

Mongodb 集合中的Mongo集合,mongodb,collections,Mongodb,Collections,我有一个db模式,看起来像传统的帖子,评论模式s.t.帖子有很多评论 有时候,我需要搜索大量的评论来寻找某个特定的领域,而我根本不想要这些帖子。因此,类似于db.posts.find({$where this.comments.field==blah})的方法是不好的,它返回的是帖子而不是评论 我现在做的也不好。我在Posts集合中有一个名为comments的字段,它保存Posts中评论的_id。这太像关系数据库了 相反,我想做的是为每个帖子和评论保留一个集合。然后,我不想将评论数据嵌入到文章中

我有一个db模式,看起来像传统的帖子,评论模式s.t.帖子有很多评论

有时候,我需要搜索大量的评论来寻找某个特定的领域,而我根本不想要这些帖子。因此,类似于
db.posts.find({$where this.comments.field==blah})
的方法是不好的,它返回的是帖子而不是评论

我现在做的也不好。我在Posts集合中有一个名为comments的字段,它保存Posts中评论的_id。这太像关系数据库了


相反,我想做的是为每个帖子和评论保留一个集合。然后,我不想将评论数据嵌入到文章中,并试图使这些数据与评论收集数据保持同步,而是想将评论本身嵌入到文章中。我认为这就像有一个子集合。这是标准吗?这样做的缺点是什么?我在这里看到的大多数讨论都是针对嵌入文档而不是嵌入集合的。

如果不必在没有父文档的情况下处理子文档,那么在文档中包含子文档是很好的

在你的情况下,如果你不想对评论做任何事情,最好在每篇文章中嵌入评论。如果你想找到一些最新的评论或者某个特定用户的评论,最好有两个集合。即使这对你来说似乎有关系

相反,我想做的是为每个帖子和评论保留一个集合

这是有道理的

我想把评论本身嵌入到帖子中

这与你之前所说的相矛盾

就像有一个子集合。这是标准吗?[…]我看到的大多数讨论[…]都是针对嵌入文档而不是嵌入集合的

这是因为“嵌入集合”并不存在,我不确定它是否真的有意义(对我来说,这听起来像是一个物化视图)

根据你在问题中所说的,我认为两个独立的集合最有意义(就像它们通常用于帖子和评论的原型示例一样)——这已经被详细讨论过了()。然后,要将它们联系起来,请使用良好的关系方式:

Post {  _id : ObjectId("..."), ... }
Comment { _id : ObjectId("..."), postId : ObjectId("..."), ... }

你说的子文档是指子集合吗?为什么我不能有一个名为Comments的子集合,然后,当我需要在没有帖子的情况下引用评论时,我只需要请求评论?子文档/subcollection
Comments
类似于
{u id,title,Comments[{u id,text},{u id,text}…}
我发现在嵌入式数组中使用
\u id
非常烦人-
\u id
在嵌入式数组中不是保留名称-它不是默认(唯一)键,也不是主键,并且可以修改。此外,数组没有集合语义,它们必须以非常不同的方式使用,因此请不要助长已经存在的大量令人恼火的错误信息。没有“子集合”好的,所以这回答了我的问题,当人们说子文档而不是子集合是什么意思。。。为什么不存在子集合?为什么我们不能那样做?然后,当你真的只需要注释而不需要帖子时,你就可以两全其美了。“subcollection”和
db.Comments.find()
db.Comments.find({“postId”:somePostId})
有什么区别?这些难道不是“嵌入式集合”应该具备的功能吗?答:大多数情况下,我都需要这两种功能,所以将其放在一个db pull中会很好。B.我使用的是Meteor,因此这也会减少必要的订阅数量。