MST

星途 面试题库

面试题:MongoDB基本数据类型在复杂嵌套文档中的使用

假设我们有一个包含多层嵌套的文档结构,其中涉及多种基本数据类型,如字符串、数字、数组等。请设计这样一个文档结构,并编写代码实现插入该文档,然后查询出特定条件下的子文档数据,条件为:某一数字类型字段大于10且某一字符串类型字段包含特定子字符串。
33.9万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

设计文档结构

假设文档结构如下:

document = {
    "main": {
        "sub1": {
            "name": "example1",
            "value": 15,
            "sub_sub1": [
                {
                    "sub_name": "sub_example1",
                    "sub_value": 20
                },
                {
                    "sub_name": "sub_example2",
                    "sub_value": 5
                }
            ]
        },
        "sub2": {
            "name": "example2",
            "value": 8,
            "sub_sub2": [
                {
                    "sub_name": "sub_example3",
                    "sub_value": 12
                }
            ]
        }
    }
}

插入文档

def insert_document(parent_doc, new_doc):
    for key, value in new_doc.items():
        parent_doc[key] = value
    return parent_doc


new_doc = {
    "sub3": {
        "name": "example3",
        "value": 18,
        "sub_sub3": [
            {
                "sub_name": "sub_example4",
                "sub_value": 25
            }
        ]
    }
}

document = insert_document(document, new_doc)

查询特定条件下的子文档数据

def query_documents(doc, target_substring, min_value):
    results = []

    def traverse(node):
        if isinstance(node, dict):
            if "name" in node and isinstance(node["name"], str) and target_substring in node["name"] and \
                    "value" in node and isinstance(node["value"], int) and node["value"] > min_value:
                results.append(node)
            for sub_node in node.values():
                traverse(sub_node)
        elif isinstance(node, list):
            for item in node:
                traverse(item)


    traverse(doc)
    return results


target_substring = "example"
min_value = 10
query_results = query_documents(document, target_substring, min_value)
print(query_results)

以上代码实现了设计文档结构、插入新文档以及按照特定条件查询子文档数据的功能。其中插入文档部分将新文档直接合并到原文档中,查询部分通过递归遍历文档结构找到符合条件的子文档并返回。