问题描述
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:使用 $ 操作符能返回一个 多个的话 没门