任何人都可以向我解释这个mongodb查询: -
@Query("{'$or':[{owner:?0, companyId:?1, status:?2},{companyId:?1, membersDetails:{'$elemMatch':{memberId:?0, status:?2}}}]}")
答案 0 :(得分:2)
这是Spring Data annotation,它将附加到方法签名上,如下所示:
@Query("{'$or':[{owner:?0, companyId:?1, status:?2},{companyId:?1, membersDetails:{'$elemMatch':{memberId:?0, status:?2}}}]}")
List<MyClass> findByClassThings(String owner, String companyId, String status);
或者实际调用的方法,以及适当的类型。
查询将对存储中的数据执行以下操作:
{
"owner": "A",
"companyId": "B",
"status": "C",
"membersDetails": [
{ "memberId": "B", "status": "X" },
{ "memberId": "C", "status": "C" },
]
},
{
"owner": "B",
"companyId": "B",
"status": "C",
"membersDetails": [
{ "memberId": "A", "status": "C" }
]
}
所以当用这样的方法调用该方法时:
List<MyClass> results = MyClass.findByClassThings("A","B","C");
由于以下原因,它会匹配这两个文件:
第一个文档匹配,因为&#34;所有者&#34;,&#34; companyId&#34;和&#34;状态&#34;将第一个查询元素中指定的所有提供的参数与$or
表达式匹配:
{owner:"A", companyId:"B", status:"C"}`
第二个文档匹配,因为提供的字段都存在于$or
条件的第二个查询元素中。成为&#34; companyId&#34;存在于文档的顶部,并且状态为&#34;是一个数组元素的匹配,也有#34; memberId&#34;与第一个参数具有相同的匹配值:
{companyId:"B", membersDetails:{'$elemMatch':{memberId:"A", status:"C"}}}
在后一种情况下,$elemMatch
要求&#34;两者都是&#34;条件&#34;必须&#34;存在于被查询单个元素的数组元素中。
答案 1 :(得分:-2)
试试这个
db.collection.find({$or: [{'owner': ?0, 'companyId': ?1, status:?2}, {'companyId': ?1, 'membersDetails': {'$elemMatch':{memberId:?0, status:?2}}}]});
由于