如何用Mongodb复杂条件查询数组内成员?

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

问题描述

[{ '_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,val为13800138000 的记录。

即结果是:

[{ '_id' : ObjectId('55f181e43fdda0be857daaf4'), 'form_info' : [ { 'val' : '王思聪', 'id' : '1'}, { 'val' : '13800138000', 'id' : '2'} ], 'tags' : [], '__v' : 0}]

该怎么写好? 谢谢大大们

问题解答

回答1:

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

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

就好了

回答2:

正在学习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’})

相关文章: