【问题标题】:Structure and query syntax for recursive documents in MongoDB?MongoDB中递归文档的结构和查询语法?
【发布时间】:2013-07-16 12:48:41
【问题描述】:

我最近开始研究 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 公式?由于公式的动态特性,实际上不可能期望一定的顺序或一定的深度。

【问题讨论】:

  • 仅供参考,您可以将 =SUM 和 =AVG 之类的内容放在反引号内(通常与 ~ 在同一键上),因为这些代码属于内联代码。欢迎使用 StackOverflow!
  • @mohawkjohn 我确实读过有关内联代码的内容,但我真的认为 Excel 公式不够酷,值得采用性感的代码格式。如果您认为这有助于其他人理解我的问题,我会更改它。
  • 鉴于您想要进行的查询的描述,我不一定认为这非常适合 MongoDB。这听起来更像是您可能想要考虑一个允许更复杂的“子/祖先”类型搜索的图形数据库。
  • 非常好的问题,谢谢。这让我在投入太多精力之前离开了 MongoDB,转而去研究图形数据库。干杯。

标签: mongodb recursion pymongo database


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    继续 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_3 MongoDB 文档。然后,您可以随意剥离工作簿。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 2021-07-18
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      相关资源
      最近更新 更多