在mongodb中,哪种风格更好? 1)或2)?尽管在db.record.find(“line”:“east”)上获得完整记录,我是否可以从1)中仅检索行名?
1
{
"line": "east",
"station":[
{ "name": "ABC", "_id": "1", },
{ "name": "DEF", "_id": "2" }
]
}
2
{ "line": "east", "l_id":"1"},
{"station":"ABC", "_id":"1", "l_id":"1"},
{"station":"ABC", "_id":"2", "l_id":"1"}
注意:line
和station
有一对多关系。
答案 0 :(得分:0)
如果你最常见的是逐行接站,并且经常需要一条线路的所有站点alt 1是最好的。如果您通常检索单站或站的子集2是最好的。 Alt 2可以导致更多的查询,因为mongo实际上没有任何关系,alt 1可能导致更大的读取,并且由于更大的对象而使得工作集更难以保持在RAM中。如果您在多行中更改工作站中的值,则Alt 1也有一个小缺点 - 那么您必须在包含它的每个行文档中更新其实例。
要获取部分对象,即不是alt 1中的所有工作站,您可以进行投影以过滤掉您不想要的内容。它仍然意味着首先将整个对象读入内存,这样你就不会从中获得很多性能。