搜索

首页  >  问答  >  正文

如何用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 天前685

全部回复(2)我来回复

  • 漂亮男人

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

    能看一下你的这个记录在数据库中怎么存储的吗?是这样:

    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
    }]})

    还是数组里面的每个子文档都是一个独立的记录?真要是按你上边展示的这样,那你直接查_id不就取出唯一的记录了。如果按我的理解,那执行这个查询:

    > 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
            }
        ]
    }

    就好了

    回复
    0
  • 怪我咯

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

    正在学习mongodb,尝试回答下sf上的一些问题。

    这个是mongodb内嵌数组的查询,在已知索引的情况下可以使用数字索引查询。

    使用数组索引匹配内嵌文档的字段

    因此查询可以这样写:

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

    回复
    0
  • 取消回复