开发者社区> 问答> 正文

mongo数组查询,如何仅返回当前匹配数组?

db.test.find();
{
    _id: ObjectId('55e99a2190df7a911d6ed1f1'),
    list: [
        {
            "aa": 10,
            "data": "test"
        },
        {
            "aa": 1,
            "data": "test"
        }
    ]
}

db.test.find({_id: ObjectId('55e99a2190df7a911d6ed1f1'), list: {'$elemMatch': {'aa': 1}}})
预期结果:
{_id: ObjectId('55e99a2190df7a911d6ed1f1'),
list: {
        "aa": 1,
        "data": "test"
}

展开
收起
蛮大人123 2016-06-14 16:15:05 2156 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪
    
        "_id" : ObjectId("559bb1d1d39f0dcac2658f8e"),
        "cust_id" : "abc123",
        "ord_date" : ISODate("2012-10-03T16:00:00Z"),
        "status" : "A",
        "price" : 25,
        "items" : [
            {
                "sku" : "mmm",
                "qty" : 5,
                "price" : 2.5
            },
            {
                "sku" : "nnn",
                "qty" : 5,
                "price" : 2.5
            }
        ]
    }
    {
        "_id" : ObjectId("559bb1ead39f0dcac2658f8f"),
        "cust_id" : "abc123",
        "ord_date" : ISODate("2012-10-03T16:00:00Z"),
        "status" : "B",
        "price" : 30,
        "items" : [
            {
                "sku" : "mmm",
                "qty" : 6,
                "price" : 3.5
            },
            {
                "sku" : "nnn",
                "qty" : 6,
                "price" : 3.5
            }
        ]
    }
    {
        "_id" : ObjectId("559bb200d39f0dcac2658f90"),
        "cust_id" : "abc123",
        "ord_date" : ISODate("2012-10-03T16:00:00Z"),
        "status" : "C",
        "price" : 35,
        "items" : [
            {
                "sku" : "mmm",
                "qty" : 7,
                "price" : 4.5
            },
            {
                "sku" : "nnn",
                "qty" : 7,
                "price" : 4.5
            }
        ]
    }
     db.customer.find({"items.qty":6},{"items.$":1}).pretty()  //只返回和查询条件匹配的那一个元素  
    {
        "_id" : ObjectId("559bb1ead39f0dcac2658f8f"),
        "items" : [
            {
                "sku" : "mmm",
                "qty" : 6,
                "price" : 3.5
            }
        ]
    }

    查询匹配的内嵌文档,你也可以直接查询,如:

     db.customer.find({"items.qty":6}).pretty()
    {
        "_id" : ObjectId("559bb1ead39f0dcac2658f8f"),
        "cust_id" : "abc123",
        "ord_date" : ISODate("2012-10-03T16:00:00Z"),
        "status" : "B",
        "price" : 30,
        "items" : [
            {
                "sku" : "mmm",
                "qty" : 6,
                "price" : 3.5
            },
            {
                "sku" : "nnn",
                "qty" : 6,
                "price" : 3.5
            }
        ]
    }
    对应你上面的查询实现:

    db.customer.find({"_id":ObjectId("559bb1ead39f0dcac2658f8f"),items: {'$elemMatch': {'sku': "mmm"}}},{"items.$":1}).pretty()
    {

    "_id" : ObjectId("559bb1ead39f0dcac2658f8f"),
    "items" : [
        {
            "sku" : "mmm",
            "qty" : 6,
            "price" : 3.5
        }
    ]

    }

    2019-07-17 19:38:00
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载