我有商家收藏。
用户会审核该商家。
每位用户只能查看一次商家。未来的评论将简单地取代前者。
这是我们存储它的方式
"Reviews" : {
"gusyanto" : {
"day" : "December 21, 2012, 8:08 am",
"review" : "Tes review"
},
"sapi" : {
"day" : "December 21, 2012, 8:18 am",
"review" : "makanan ini sangat enak"
}
}
或者我们也可以使用这个
"Reviews" : [{
"userid" : "gusyanto",
"day" : "December 21, 2012, 8:08 am",
"review" : "Tes review"
},
{
"userid" : "sapi",
"day" : "December 21, 2012, 8:18 am",
"review" : "makanan ini sangat enak"}
]
}
所以基本上我们想要将它存储为字典,其中键是userid,或者我们可以将其存储为userID是字段键的数组。所以第二种方法的关键是静态即userID。
我们想要为条目编制索引。例如,用户可能想知道他已经审查了哪些商家。
我应该使用哪种方法?
答案 0 :(得分:2)
好吧,我会这样做:
reviews (collection)
|
|
______________|______________
| |
Doc 1 Doc 2
{"user_id": "USer1", {"user_id": "USer2",
"review" : "Tes review", "review" : "makanan ini sangat enak",
"date" : "December 21, 2012, 8:08 am", "date" : "December 21, 2012, 8:08 am",
"business": "Business1" "business": "Business2"
} }
db.reviews.ensure_index([("user_id", ASCENDING), ("date", ASCENDING)])
db.reviews.ensure_index([("business", ASCENDING), ("date", ASCENDING)])
假设你选择做这样的事情:
Businesses (collection)
|
|
______________|______________
| |
BusinessDoc 1 BusinessDoc 2
{"business": "business1", {"user_id": "business",
"review" : {..business1 reviews here..}, "review" : {..business2 reviews here..},
} }
我建议你不要将所有评论都放在一个商家中,在单个文档中说“B1”,如果你有一个“商家”系列会发生什么。
答案 1 :(得分:1)
我将以你的文件为例,一个例子;但是,我想提一下,以字符串格式存储日期可能会损害您的索引和查询能力。
在此Reviews
字段上制作索引的问题在于您拥有的评论内容字段。
我可以轻松地想象对于单个索引字段来说太大了,在这种情况下会抛出异常并且不会将其编入索引(http://docs.mongodb.org/manual/reference/limits/#Index%20Size和http://docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documents)。这可能是MongoDB中全文字段的最大问题之一。
因此,考虑到这一点,我已经不建议在场地上形成一个指数。
但是,关于哪个指数最好是对你的查询极其主观。
如果您只是通过一个字段或另一个字段查询,即day
或userid
,那么我会创建两个单独的索引,但是如果您在查询中组合字段,我很可能会去索引的复合版本。