mongodb - mongo数组查询,如何仅返回当前匹配数组?
PHP中文网
PHP中文网 2017-04-27 09:02:24
0
4
548
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" }
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复 (4)
PHPzhong
> db.customer.find().pretty() { "_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 } ] }

db.test.find({_id: ObjectId('55e99a2190df7a911d6ed1f1'), list: {'$elemMatch': {'aa': 1}}},{"list.$":1}).pretty()

    PHPzhong

    首先 你用mongodb 你得明白 monggodb是nosql
    然后 mongo的collection中存储的是document
    最后 你要知道 find 返回的值一定是一个document的集合 也就是个array

    所以你说的 基本上无法实现

      洪涛

      只需要在find中填写你需要的查询的条件即可。更多详情,请查阅mongodb官网

        为情所困

        使用 $ 操作符能返回一个 多个的话 没门

          最新下载
          更多>
          网站特效
          网站源码
          网站素材
          前端模板
          关于我们 免责声明 Sitemap
          PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!