首页 > 解决方案 > 如何使用数组内的嵌入文档的字段查找文档?

问题描述

我有学生记录的数据/架构:

{

    "_id" : ObjectId("579ed0ba7d509178a97fae8f"),
    "fullName" : "ABC",
    "enroll" : "AB1234",
    "profile" : {
        "isCompleted" : true,
        "verification" : [ 
            {
                "pro" : true,
                "verifiedBy" : "ProAct",
                "verifiedOn" : ISODate("2016-09-12T07:36:53.680Z")
            }, 
           
        ],
        "isChecked" : false,
        "fullName" : "ABC",
        "gender" : "Male",
        "emergencyContactPerson" : {
            "name" : "Father",
            "mobile" : "9412345678",
            "email" : "example@gmail.com",
        },
    },
    "contact" : {
        "emailID" : {
            "isVerified" : true,
            "isChecked" : false,
            "verificationTokenExpiresIn" : ISODate("2016-08-01T05:35:00.218Z"),
            "verifiedOn" : ISODate("2016-08-01T04:35:10.992Z")
        },
        "mobileID" : {
            "isVerified" : true,
            "isChecked" : false,
            "verificationTokenExpiresIn" : ISODate("2016-08-01T04:42:45.206Z"),
            "verifiedOn" : ISODate("2016-08-01T04:33:36.692Z")
        }
    },
    "services" : [ 
        {
            "applied" : true,
            "appliedOn" : ISODate("2016-09-17T03:01:49.829Z"),
            "status" : "Created",
            "mac" : "70-77-88-00-AA-BB",
            "createdBy" : "Example"
        },
    ]
}

如何构建查询,在 mac 地址 70-77-88-00-AA-BB 的帮助下获取学生信息。我只知道mac地址值?

我是新来的,请帮帮我

标签: mongodbmongoosemongodb-query

解决方案


询问

  • services.mac是服务的所有 MAC 地址成员的数组
  • 在查询中(不在聚合中$eq),如果数组包含该值,则该数组等于该值,因此上述方法将起作用
  • 波纹管查询返回所有在 services 数组上具有该 mac 地址的学生
  • 如果你想让它更快,你也可以在“services.mac”上创建一个索引

*阅读 mongodb 文档,它非常好,并附有示例

测试代码在这里

db.collection.find({
  "services.mac": "70-77-88-00-AA-BB"
})

推荐阅读