recherche

Maison  >  Questions et réponses  >  le corps du texte

数据库 - Mongodb多层嵌套数组如何精确查询?

{
    "excelID": "10001",
    "excelName": "一年级学生信息",
    "sheetArrays": [
        {
            "sheetName": "一班",
            "studentInfos": [
                {
                    "name": "张三",
                    "sex": "男"
                },
                {
                    "name": "李四",
                    "sex": "男"
                }
            ]
        },
        {
            "sheetName": "二班",
            "studentInfos": [
                {
                    "name": "王五",
                    "sex": "男"
                },
                {
                    "name": "赵六",
                    "sex": "女"
                }
            ]
        }
    ]
}

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

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

漂亮男人漂亮男人2757 Il y a quelques jours992

répondre à tous(1)je répondrai

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-02 09:23:41

    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.

    répondre
    0
  • Annulerrépondre