假设我有一个json对象:
Object = {
param1: '',
param2: '',
param3: '',
param4: {
paramA: '',
paramB: '',
paramC: '',
paramD: [AnotherJsonObject1,AnotherJsonObject2]
}
}
我的MongoDB结构会不相似?这种类型的结构会使数据(或其中一些)不那么容易搜索吗?
修改1:
通过较少搜索,我的意思是:如果顶级实体具有子实体,这些子实体本身具有子实体,依此类推。我是否能够以与顶级效率相同的效率到达最低级别的实体?
我目前在网站上严重依赖JSON文件。这些文件不需要索引为可搜索的,但它们在逻辑上适合数据库。
例如:我有一个导演,导演有他创作的电影列表,这个列表中的每部电影都有自己的演员列表,每个演员都有一个生物。
此示例中的bio不需要编入索引。我可以只包含一个包含actor的bio的文件的链接,但是我想知道我是否可以将它添加到DB中,因为这样它将全部符合逻辑,或者“不必要的”数据会损害db的能力有效地执行。
答案 0 :(得分:2)
Mongodb以BSON格式存储文档。它看起来与JSON结构类似。
您解释的结构似乎是嵌套文档的正确用例。
您可以使用.
运算符
这种类型的结构会使数据(或其中的一部分)更少 搜索?
这取决于您的嵌套数据结构和这些字段上的查询类型。在嵌套文档中,嵌套结构情况可能存在一些限制或查询可能会更复杂一些。但是,就嵌套文档的可搜索性而言,它完全取决于您的用例。
例如。
director:[movies:[{movieName:"movie1", actors:[{firstName:"will", lastName:"smith"}, {firstName:"bruce", lastName:"willis"}]}]]
在上面的场景中,如果您搜索导演,其中任何定向影片都有具有firstName的actor,而且作为smith的lastName可能会变得有点复杂。
像一个简单的查询{director.movies.actors.firstName:"will", director.movies.actors.lastName:"smith"}
可能会返回错误回复
文档:director:[movies:[actors:actors:[{firstName:"will", lastName:"willis"}, {firstName:"bruce", lastName:"smith"}]]]
也将是一场积极的比赛。
此外,像firstName!="bruce"
这样的否定查询也将返回两个文档。
您可能希望浏览相同的mongodb文档
对于第一种情况,您可以参考elemMatch