需要帮助了解mongo查询

时间:2015-03-20 05:23:35

标签: java mongodb mongodb-query spring-data-mongodb

任何人都可以向我解释这个mongodb查询: -

@Query("{'$or':[{owner:?0, companyId:?1, status:?2},{companyId:?1, membersDetails:{'$elemMatch':{memberId:?0, status:?2}}}]}")

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

由于