2016-03-02 52 views
0

在mongodb中,哪种风格更好? 1)或2)?尽管在db.record.find(“line”:“east”)上获取完整记录,我是否可以从1中检索唯一的行名?Mongodb中最喜欢哪种风格?

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"} 

注:linestation具有一对多的关系。

+1

[MongoDB关系:嵌入或引用?]的可能重复(http://stackoverflow.com/questions/5373198/mongodb-relationships-embed-or-reference) – joao

回答

0

如果您最常用的是按线路获取电台并且经常需要一条线路的所有电台,那么alt 1是最好的。如果您通常检索单个电台或电台的子集,2是最好的。由于mongo实际上没有任何关系,Alt 2可以导致更多的查询,alt 1会导致更大的读取,并且由于更大的对象而使工作集保留在RAM中更加困难。如果您在多个工作站中更改工作站中的值,则Alt 1也有一个小缺点 - 那么您必须在每个包含它的行文档中更新它的实例。

要获取部分对象,即不是所有站在alt 1中,您可以做一个投影来过滤掉你不想要的东西。它仍然意味着首先将整个对象读入内存,这样你就不会在性能上获得很多。

+0

有'l_id'上的索引,db。即使在微观优化级别,record.find({“l_id”:“1”})的效率几乎不如'db.record.findOne({“_ id”:1“})'效率更高,除此之外,与第一个相比,我没有任何不一致的地方,所以我并不完全同意你的第一句话。就我个人而言,我已经很少看到嵌入式文档的使用情况,但是对于每个人都有一个意见问题。 – cdbajorin