MongoDB$in运营商的效率如何?

MongoDB$in运营商的效率如何?,mongodb,database-design,mongodb-query,Mongodb,Database Design,Mongodb Query,假设我将有数百万条评论交叉发布到多个关注点。我是否应该多次存储每个交叉发布的评论: { user_id: 1, text: "hello world", poi_id: some_id1 } { user_id: 1, text: "hello world", poi_id: some_id2 } 或者我应该把它作为一个数组 { user_id: 1, text: "hello world", poi_ids: [some_id1, some_id2]

假设我将有数百万条评论交叉发布到多个关注点。我是否应该多次存储每个交叉发布的评论:

{
  user_id: 1, 
  text: "hello world",
  poi_id: some_id1
}
{
  user_id: 1, 
  text: "hello world",
  poi_id: some_id2
}
或者我应该把它作为一个数组

{
  user_id: 1, 
  text: "hello world",
  poi_ids: [some_id1, some_id2]
}

第一种方法可以在poi_id上使用索引,并以极快的速度进行查询,但会存储注释的冗余副本。第二种方法作为数据库结构更直观,节省了空间,但如果我想(比如)获取与某些id1相关的所有注释,我担心使用$in的查询效率。

我认为效率足够,只要mongodb比SQLB快,但我真的认为您误解了
$in
的实际用途。要简单地查找“some_id1”作为单数值,您只需在恰好包含数组的字段中请求该值。因为MongoDB不关心,所以不需要只对数组值使用特殊运算符。你的想法似乎与我相反。哦!是的,我读错了$in的定义。那么查询{poi_id:some_id1}会像预期的那样工作吗?如果我要求MongoDB确保poi_ID上的索引,它会在poi_ID是数组的情况下对每个元素进行散列和索引吗?@wuxiekeji是的。这最终归结为应用程序预期术语中的“重复数量”。这实际上与
$in
或您所问的“性能”无关。唯一需要考虑的是,“大量”的数组项(500个或更多作为指导)在存储分配和查询性能方面都不是一个好主意。因此,你所问的实际问题对你想要达到的结果来说并不是真正有效的。