数据库 - Mongodb多层嵌套数组如何精确查询?
漂亮男人
漂亮男人 2017-05-02 09:21:41
0
1
1021
{
    "excelID": "10001",
    "excelName": "一年级学生信息",
    "sheetArrays": [
        {
            "sheetName": "一班",
            "studentInfos": [
                {
                    "name": "张三",
                    "sex": "男"
                },
                {
                    "name": "李四",
                    "sex": "男"
                }
            ]
        },
        {
            "sheetName": "二班",
            "studentInfos": [
                {
                    "name": "王五",
                    "sex": "男"
                },
                {
                    "name": "赵六",
                    "sex": "女"
                }
            ]
        }
    ]
}

我希望通过一条语句查出所有sex为男的人员的名称;

我还希望能通过一条语句查出name为王五对应的班级和他的基本信息,求朋友们为我答疑解惑,感激不尽。

漂亮男人
漂亮男人

répondre à tous(1)
过去多啦不再A梦

Quel est le concept d'une déclaration ? aggregationEst-ce que cela compte comme une déclaration ?

db.test3.aggregate([
    {$match: {"sheetArrays.studentInfos.sex": '男'}},
    {$unwind: "$sheetArrays"},
    {$unwind: "$sheetArrays.studentInfos"},
    {$match: {"sheetArrays.studentInfos.sex": '男'}},
]);
db.test3.aggregate([
    {$match: {"sheetArrays.studentInfos.name": '王五'}},
    {$unwind: "$sheetArrays"},
    {$unwind: "$sheetArrays.studentInfos"},
    {$match: {"sheetArrays.studentInfos.name": '王五'}},
]);

Bien que cela puisse être fait, en fait une telle structure de données n'est pas raisonnable.
La conception de modèles MongoDB est un sujet important. Si vous êtes intéressé, vous pouvez lire attentivement le chapitre sur la modélisation des données.
Le principe de base est en fait qu'il n'y a pas de principe. C'est bien plus gênant que de satisfaire le paradigme relationnel. Il n'y a aucune ligne directrice vous disant quoi faire. Mais fondamentalement, le modèle de données que vous choisissez doit prendre en compte différents scénarios sur la façon de l'utiliser, comment le mettre à jour, comment l'insérer, comment interroger... Un modèle qui peut bien répondre aux scénarios d'utilisation est un bon modèle.
Retournez à votre modèle et voyez ce qui n'a pas fonctionné :

  1. En prenant le moteur WT comme exemple, le verrouillage au niveau du document, lorsque quelqu'un dans une classe apporte des modifications, des modifications seront apportées au document, ce qui signifie que ces opérations sont toutes mutuellement exclusives et efficaces. à quel point c'est grave.

  2. Comme vous pouvez le constater, la requête ci-dessus n'est ni élégante ni efficace. Sans parler de la mise à jour, c'est difficile d'y penser.
    Ce n'est donc pas un bon modèle. Bien que MongoDB prône l'anti-paradigme, n'allez pas jusqu'à l'anti-paradigme pour le plaisir de l'anti-paradigme. Essayez un autre modèle qui est plus pratique à utiliser.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal