【问题标题】:Need help understanding mongo query需要帮助理解 mongo 查询
【发布时间】:2015-03-20 05:23:34
【问题描述】:

谁能解释一下这个 mongodb 查询:-

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

【问题讨论】:

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


    【解决方案1】:

    这是一个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");
    

    它会匹配这两个文档,原因如下:

    • 第一个文档匹配是因为“owner”、“companyId”和“status”中的元素将第一个查询元素中指定的所有提供参数与$or 表达式匹配:

      {owner:"A", companyId:"B", status:"C"}`
      
    • 第二个文档匹配,因为提供的字段都存在于$or 条件的第二个查询元素中。 “companyId”出现在文档的顶部,“status”是一个数组元素的匹配项,该数组元素也具有与第一个参数相同的匹配值的“memberId”:

      {companyId:"B", membersDetails:{'$elemMatch':{memberId:"A", status:"C"}}}
      

    在后一种情况下,$elemMatch 要求“两个”条件“必须”出现在为单个元素查询的数组元素中。

    【讨论】:

      【解决方案2】:

      试试这个

      db.collection.find({$or: [{'owner': ?0, 'companyId': ?1, status:?2}, {'companyId': ?1, 'membersDetails': {'$elemMatch':{memberId:?0, status:?2}}}]});
      

      谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-18
        相关资源
        最近更新 更多