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

浏览:25日期:2023-07-04

问题描述

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

问题解答

回答1:

> 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()

回答2:

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

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

回答3:

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

回答4:

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

相关文章: