recherche

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

如何用Mongodb复杂条件查询数组内成员?

[{
    "_id" : ObjectId("55f181e43fdda0be857daaf4"),
    "form_info" : [ 
        {
            "val" : "王思聪",
            "id" : "1"
        }, 
        {
            "val" : "13800138000",
            "id" : "2"
        }
    ],
    "tags" : [],
    "__v" : 0
},
{
    "_id" : ObjectId("55f181e43fdda0f48578acf4"),
    "form_info" : [ 
        {
            "val" : "李丽珍",
            "id" : "1"
        }, 
        {
            "val" : "13934438010",
            "id" : "2"
        }
    ],
    "tags" : [],
    "__v" : 0
}]

如果我想筛选form_info数组内符合 成员对象内id为1,val王思聪id为2,val13800138000 的记录。

即结果是:

[{
    "_id" : ObjectId("55f181e43fdda0be857daaf4"),
    "form_info" : [ 
        {
            "val" : "王思聪",
            "id" : "1"
        }, 
        {
            "val" : "13800138000",
            "id" : "2"
        }
    ],
    "tags" : [],
    "__v" : 0
}]

该怎么写好? 谢谢大大们

PHPzPHPz2818 Il y a quelques jours688

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

  • 漂亮男人

    漂亮男人2017-04-28 09:06:07

    Pouvez-vous jeter un œil à la manière dont votre dossier est stocké dans la base de données ? Ça y est :

    db.test6.insert(
    {"test":[{
        "_id" : ObjectId("55f181e43fdda0be857daaf4"),
        "form_info" : [ 
            {
                "val" : "王思聪",
                "id" : "1"
            }, 
            {
                "val" : "13800138000",
                "id" : "2"
            }
        ],
        "tags" : [],
        "__v" : 0
    },
    {
        "_id" : ObjectId("55f181e43fdda0f48578acf4"),
        "form_info" : [ 
            {
                "val" : "李丽珍",
                "id" : "1"
            }, 
            {
                "val" : "13934438010",
                "id" : "2"
            }
        ],
        "tags" : [],
        "__v" : 0
    }]})

    Ou chaque sous-document du tableau est-il un enregistrement indépendant ? Si c'est comme ce que vous avez montré ci-dessus, alors si vous vérifiez simplement le _id directement, vous obtiendrez le seul enregistrement. Si selon ma compréhension, exécutez cette requête :

    > db.test6.find({"test._id":ObjectId("55f181e43fdda0be857daaf4")},{"test.$":1}).pretty();
    {
        "_id" : ObjectId("55f255aef566c6baf2af1fac"),
        "test" : [
            {
                "_id" : ObjectId("55f181e43fdda0be857daaf4"),
                "form_info" : [
                    {
                        "val" : "王思聪",
                        "id" : "1"
                    },
                    {
                        "val" : "13800138000",
                        "id" : "2"
                    }
                ],
                "tags" : [ ],
                "__v" : 0
            }
        ]
    }

    C'est bien

    répondre
    0
  • 怪我咯

    怪我咯2017-04-28 09:06:07

    J'apprends Mongodb et j'essaie de répondre à quelques questions sur SF.

    Il s'agit d'une requête pour le tableau intégré de mongodb. Si l'index est connu, vous pouvez utiliser une requête d'index numérique.

    Utiliser l'index de tableau pour faire correspondre les champs des documents intégrés

    La requête peut donc s'écrire ainsi :

    db.user.find({'form_info.0.id': '1', 'form_info.0.val': '王思聪', 'form_info.1.id': '2', 'form_info.1.val': '13800138000'})

    répondre
    0
  • Annulerrépondre