7

我最近开始研究 MongoDB 的工作项目。我对 JSON 和 MongoDB 的查询结构还很陌生,所以我希望你们中的一个可以提供一些说明。

我已经将问题翻译成 Excel 术语,因为它很常见并且很好地代表了我的问题。

如果我试图将 Excel 公式建模到 MongoDB 文档中,那么最好的格式是什么(我将在下面解释我的潜在查询)?请记住,Excel 中的公式可以(几乎)以任何顺序和任何深度嵌套,并且参数可以以字符串或数字形式出现。我希望能够在这些单元格中搜索以回答诸如“查找使用 =AVG() 函数的所有单元格”或“查找包含 =AVG() 函数内的 =SUM() 函数的所有单元格”之类的查询(例如 =AVG(x,y,z,SUM(a,b,c)))。” 如果无法回答所有问题,则能够回答这些基于公式结构的查询比回答有关数字或字符串的查询更重要。

目前我设想我的文件大致具有以下格式:

{
    formula: "AVG",
    arguments: [4,5, {
        formula: "SUM",
        arguments: [6,7,{
            formula: "ABS",
            arguments: [-8,-9]
(closing parenthesis/brackets)
}

这是我想要做的合理格式吗?如果是,我将如何查询“在 =AVG 内查找 =SUM 的案例”?如何找到嵌套更深的 =ABS 公式?由于公式的动态特性,实际上不可能期望一定的顺序或一定的深度。

4

2 回答 2

4

如果您有这样的任意结构,那么我建议您以不同的方式存储树。任意结构难以查询和处理。

MongoDB 文档有一些建议:http ://docs.mongodb.org/manual/tutorial/model-tree-structures/

于 2013-07-17T20:30:38.893 回答
0

继续 Excel 类比:

首先,我认为在二级及以上儿童上进行查询并不是真正必要的(这使问题变得非常简单)。这种结构不能轻易适应,所以公平警告。这不是我原来问题的完美答案,对不起!似乎 MongoDB 不太适合很容易地存储我的原始问题。

我使用的结构类似于 MongoDB 推荐的表示树的方式。不再试图将 Excel 文档表示为一个 MongoDB 文档,而是现在由许多表示(每个使用的唯一公式一个,一个用于存储字符串和值)。与同一个 excel 工作簿相关的所有 MongoDB 文档都只是有一个字段工作簿并存储它们属于哪个工作簿。

一个非常简单的例子(自定义_id标签不是必需的,但更容易阅读):

{_id: book1_1
 workbook: book1,
 cell_values: [1,2,3],
 cell_strings: ['hello','world']}

{_id:book1_2
 workbook:  book1,
 formula: 'SUM',
 children: ['AVG','ABS']}

{_id:book1_3
 workbook: book1,
 formula: 'AVG',
 children: ['SUM']}

{_id:book1_4
 workbook: book1,
 formula: 'ABS',
 children: ['SUM']}

这 4 个 MongoDB 文档代表一个具有以下公式结构的 Excel 文档(这不是唯一可以生成上述 MongoDB 文档的 Excel 表):

=SUM(AVG())
=AVG(SUM())
=ABS(SUM(ABS()))

连同值 1,2,3 和字符串 'hello','world' 在其中某处。

查询“在 AVG 公式中使用 SUM 公式查找书籍”是以下查询:

db.collection.find({$and: [{formula: 'AVG'},{children: 'SUM'}]})

返回_id:book1_3MongoDB 文档。然后,您可以随意剥离工作簿。

于 2013-08-05T16:09:33.560 回答